您的位置 首页 java

java之学习篇-乱码问题汇总

今天突然想到之前的一个项目,是和另一个公司合作,我提供后台,对方写小程序调用我的接口,我本地测试好接口后,是没有问题的,然后部署到对方服务器(windows系统),接着就是出先各种各样的乱码问题,在这里汇总记录下,以便后面学习。

java乱码出现的问题有很多,这里主要记录下tomcat, log4j , mysql , jsp ,html,http(get,post请求乱码处理)。常见的问题可能是tomcat,http请求乱码问题了,至于jsp和html的乱码问题就很简单了,相信大家也知道,我也就不多说了,首先来说下tomcat的乱码问题,

一个是程序需要发送http GET请求到服务器,请求的参数中包含了中文字符。程序中参数为 UTF-8 格式,且经过了UTF-8 URL 编码 再发送。使用的tomcat服务器,但服务器端后台程序中取到的参数的中文是乱码。

解决办法:修改Tomcat的Server.xml,在Connector标签中加上URLEncoding参数。

<Connector port="8080" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="99" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>
 

另一个是tomcat控制台打印乱码,程序中输出到tomcat控制台的中文信息乱码了,

解决办法:打开文件/tomcat/bin/catalina.bat,然后设置set JAVA_OPTS= 的内容中添加选项-Dfile.encoding=UTF-8即可,当然,我不敢包证,但是我的就是这么处理然后就可以了。

然后是log4j的日志打印乱码,这个乱码也是打印在tomcat控制台的时候乱码,但是日志文件却不会,而且我本地测试的时候打印也不会乱码

而且我配置的也是utf-8,这个曾经让我恼火好久,后面我偶然在一篇博客上发现,说有些服务器你配utf-8是不行的,他的是编码就是GBK,我就权当试试,没想到还真是这个问题,这也是让我很无语,,,,

然后就是http请求的乱码,我这个乱码问题是我在shiro判断是否登录的时候,因为我是前后端分离,所以我shiro判断未登录的时候,是返回状态码和提示信息,而不是跳转登录页面,我用response返回中文提示信息是,结果返回的是乱码,可是我明明设置了

res.setCharacterEncoding("utf-8");
 

可是到前端页面的时候还是乱码了,这让我很费解,后面我仔细想了下,我服务端是设置了返回utf-8的编码,但是浏览器是用utf-8去解析的吗?后面去查了下还要加一条配置,

res.setContentType("text/html;charset=utf-8");
 

之前知道有这个配置,但是一直不知道有什么区别,今天算是明白了一点,这个就是告诉浏览器,你要用什么编码去解析这个数据。

最后一个是mysql 中文的乱码了,这个着实让我烦恼了好久,我去网上查了,说建表的时候要设置utf-8的编码,可是我在新建数据库的时候就设置了默认就是utf-8的编码,然后我说要配置数据库的默认编码,修改mysql配置文件/etc/my.cnf。

[mysqld]
character-set-server= utf8  
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8
 

我设置好这个以后,终于不会乱了,但是,,保存进去的中文居然全部变成了???号,于是又去奔波了,

通过这个命令,我们可以看到,我们服务端居然还不是utf-8???

这让我很伤,终于,寻的良方,

只要在数据库properties文件的连接信息里加两个参数

?useUnicode=true&characterEncoding=utf-8
 

就可以了,唉,真是一波三折啊,

真是与服务器斗,其乐无穷;与数据库斗,其乐无穷;与浏览器斗,其乐无穷啊

文章来源:智云一二三科技

文章标题:java之学习篇-乱码问题汇总

文章地址:https://www.zhihuclub.com/171071.shtml

关于作者: 智云科技

热门文章

网站地图