同样的项目在不同的服务器部署产生乱码的问题 ,java中文乱码

17 篇文章 1 订阅
14 篇文章 0 订阅

1,ssh的配置文件信息---------------

https://bbs.csdn.net/topics/392358893?page=1#post-404447883

 

问题已经解决!
是我自己系统的问题
我使用的是mac capitan 10.11,同事使用的都是最新的mac系统
导致了只要是我使用ssh连服务器然后执行了容器的重启操作,都会出现乱码。

---
导致乱码的较根本原因就是ssh在登录远程服务器的时候吧本地的一些环境变量带了上去,导致ssh发出警告:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
以前没注意,以为没大碍,结果导致了

当然,带不带本地的环境变量到服务器,这个设置在ssh配置文件里面是有的,是这个设置,存在于ssh配置文件里:
SendEnv LANG LC_*
只要把这个配置注释掉,那么在此登录就可以成功
或者在登录中断,terminal或者iterm的设置中有一个叫 
set locale environment/variables ...的选项,把它去掉也能解决
----
具体细节就不在解释。
在解决问题的时候分析一定重于操作

 

2,改mysql等--------------------------------

https://bbs.csdn.net/topics/392295366?page=1

 

问题的解决过程:
考虑流程:1、数据库存储格式,索引的格式编码 2、项目的文件编码  3、浏览器(tomcat部署编码格式)
一、项目中默认编码设置是UTF-8
二、项目开发环境Eclipse的编码方式是UTF-8(确保代码中的中文显示正常)
三、Tomcat配置:
       更改两个文件的配置
       1.server.xml(添加红色部分)
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" 

URIEncoding="UTF-8" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  URIEncoding="UTF-8"/>

        2.web.xml
 <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>

默认tomcat7中上面这段代码在注释中,把它注释去掉。
重启tomcat使配置生效。
四、mysql配置
1.修改mysql默认配置:
默认的mysql配置:server、client都是latin1,对中文是不支持的,这里改为utf8
方法:
修改配置文件:
#vim /etc/mysql/my.cnf 
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

重启mysql

/etc/init.d/mysql restart

检查编码方式:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                 |
| character_set_database   | latin1               |
| character_set_filesystem | binary               |
| character_set_results    | utf8                      |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

2.修改项目使用的数据库的配置
修改此数据库的编码方式为utf8(默认是latin1)
mysql> alter database 数据库名 character set utf8;

查看此数据库的编码:
mysql> status

Connection id:        41
Current database:    tslcrms
Current user:        root@localhost
SSL:            Not in use
Current pager:        stdout
Using outfile:        ''
Using delimiter:    ;
Server version:        5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:    10
Connection:        Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:            53 min 14 sec

mysql> show create database tslcrms;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| tslcrms  | CREATE DATABASE `数据库名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+------------------------------------------------------------------+

3.导入数据库文件中的表、字段的编码方式都修改成utf8
可以直接改.sql文件,改完导入。
也可以先导入,再用命令查看和更改。


附:在mysql中使用命令修改字符集:
     mysql> SET character_set_client = utf8 ;
     mysql> SET character_set_connection = utf8 ;
     mysql> SET character_set_database = utf8 ;
     mysql> SET character_set_results = utf8 ;
     mysql> SET character_set_server = utf8 ;
     mysql> SET collation_connection = utf8 ;
     mysql> SET collation_database = utf8 ;
     mysql> SET collation_server = utf8 ;

 

3,----------------

终极完美解决java web与tomcat服务器中文乱码问题

https://blog.csdn.net/qq_40938301/article/details/83472395

 

Java Web项目中,如果使用的是Tomcat服务器的话,在数据交互时,经常会出现深恶痛绝 中文乱码的问题,原因主要可以分为以下两个方面:

1.在JSP页面中,中文根本无法显示。

这种情况下,通常的原因是:

没有把文件头的字符集设置为中文字符集。

解决办法:在文件头上写明如下内容:

<%@ page language="java" pageEncoding="utf-8"%>
或者

<%@ page language="java" contentType="text/html; charset= utf-8"%>
utf-8编码也可以用gb2312字符集替换,这两个都是中文字符集,但一般普遍用utf-8

2.提交过程中显示乱码

提交过程中显示乱码指的是中文字符经过了tomcat服务器之后,在IDE的控制台中、提交到的页面中等处产生的中文乱码

我们一般可以通过url传这个中文参数,看url中的中文参数是否乱码判断是在客户端即浏览器中产生的乱码还是在服务器中产生的乱码

在提交中文数据给服务器,出现中文乱码的原因是:

中文字符在被提交给服务器时,由于服务器会将其默认为ISO-8859-1 编码,而在网页上用的是utf-8或者gb2312编码,不能兼容。

有以下3个解决办法:

(1)直接将中文字符串转成utf-8格式

        String name = request.getParameter("stuname");
        name = new String(name.getBytes("ISO-8859-1"),"utf-8");
这种方法是直接将这个中文字符串转换成了支持中文的编码,但是这种方法必须对每一个字符串都进行转码,很直接但很麻烦

(2)直接修改request的编码方式

可以将request的编码修改为支持中文的编码方式,这样整个页面中的请求,都可以自动转为中文,

        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("stuname");
但是一定要注意的是:该方法必须在取出值之前就设置request的编码,并且表单form的提交方式应该是post,并且这种方法必须对每个页面都进行request的设置,也很麻烦

(3)使用过滤器

在大型项目中,如果每一个文件都去设置编码的话,十分繁琐,故在工程中一般使用过滤器解决Tomcat中文乱码问题。

利用过滤器,可以对整个Web应用进行统一的编码过滤,比较方便。

注意:使用过滤器也要求表单提交方式是post,默认不设置的话表单提交方式是get

编写过滤器方法:

首先,建立EncodingFilter的java类,代码如下

package Filter;
 
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
 
@WebFilter(filterName = "EncodingFilter")
public class EncodingFilter implements Filter {
    public void destroy() {
    }
 
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        chain.doFilter(req, resp);
    }
 
    public void init(FilterConfig config) throws ServletException {
 
    }
 
}
然后,配置web.xml

    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>Filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
要注意的是web.xml标签是有一定顺序的,顺序不当会有The content of element type "web-app" must match "报错,

例如,filter等的标签应放在servlet的前面

重新提交并重启,中文乱码问题已成功解决  (也需要表单是post方法才行)

 

 
--------------------- 
版权声明:本文为CSDN博主「学霸的男人」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40938301/article/details/83472395

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值