SSH框架GBK编码项目中文乱码问题解决方法 不对,控制在30个字左右,重新给你: # SSH框架GBK编码项目中文乱码问题的解决方法分享 对,这个刚好,23个字?不对,数一下:1.S 2.S 3.H 4.框 5.架 6.G 7.B 8.K 9.编 10.码 11.项 12.目 13.中 14.文 15.乱 16.码 17.问 18.题 19.的 20.解 21.决 22.方 23.法 24.分 25.享。哦,差一点,再调整得更贴合SEO,增加搜索流量: # SSH框架GBK编码项目中文乱码问题解决方
做过老项目维护的朋友,大概率都遇到过SSH框架GBK编码项目的乱码问题,尤其是表单提交中文的时候,全是问号或者乱码字符,改半天都找不到问题在哪。我前阵子刚帮朋友调过一个2010年左右的老项目,踩了好几个坑,整理几个常见的解决方法给大家参考。
首先说最基础也最容易漏改的地方,就是页面编码声明。很多老项目的JSP页面一开始没写对,或者只写了HTML部分没设置page指令的编码。
如果你的页面是JSP,最顶行一定要加上<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK" %>,HTML里的meta标签也要对应写成。别写混UTF-8,整个项目统一GBK才不会出问题,我一开始就是这里改混了,白折腾一个多小时。
改完页面,第二个要检查的就是过滤器。SSH项目一般都会配置字符编码过滤器,大部分人用的是Spring自带的CharacterEncodingFilter,打开你的web.xml看看。
这里要确认两个点,第一filter的encoding是不是设成了GBK,不是UTF-8;第二forceEncoding参数是不是设成了true,这个参数一定要开,不然过滤器只会设置请求编码,不会处理响应,乱码问题还是会存在。配置大概是这样:
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
GBK
forceEncoding
true
然后filter-mapping要放在所有其他过滤器的最前面,拦截所有请求,别漏了/*的拦截规则,不然有些请求直接绕开过滤器,还是会乱码。
要是改完过滤器还是乱码,那就要看看get请求的问题了。很多老项目用tomcat,tomcat不同版本的默认编码不一样,老版本tomcat(比如tomcat 6、7)默认get参数编码是ISO-8859-1,就算你设了过滤器,过滤器默认只处理post请求,get请求的参数还是乱码。
这个问题改起来也简单,打开tomcat的server.xml,找到你项目对应的Connector标签,加上URIEncoding="GBK"就可以了。改完之后重启tomcat,get过来的中文参数就能正常解析了。要是你不方便改tomcat配置,也可以手动转码,拿到参数之后用new String(request.getParameter(name).getBytes("ISO-8859-1"),"GBK")转一遍,就是每个参数都要写比较麻烦,适合改不了全局配置的场景。
接下来要检查Struts2的编码配置,如果你的SSH框架用的是Struts2作为控制层,那struts.xml里也要设置对应的编码。
在struts.xml里加上 就可以了,这个参数会指定Struts处理请求的编码,忘记设置的话,就算你前面过滤器改对了,Struts解析参数的时候还是会用默认编码,导致乱码。
如果上面这些地方都改完,数据库存进去还是乱码,那就要检查数据库连接和库表编码了。GBK项目对应的数据库,库和表的编码都要设成gbk或者gbk_chinese_ci,别设成utf8mb4。
然后看你的数据库连接url,url后面要加上characterEncoding=gbk,比如jdbc:mysql://localhost:3306/test?characterEncoding=gbk,这个参数告诉JDBC用什么编码和数据库交互,漏加的话,存进去取出来都是乱码。我朋友那个项目就是这里出问题,前面改完前端和请求,结果数据库里全是乱码,找了好久才发现url没加编码参数。
还有一种比较少见的情况,就是文件本身编码不对,比如你把GBK项目放到IDE里,IDE默认用UTF-8保存了Java文件或者JSP文件,那代码里写死的中文都会变成乱码。这个时候要改IDE的编码设置,Eclipse里要把项目的文本编码改成GBK,IDEA也要在设置里把项目编码改成GBK,重新保存一遍文件就好了。
其实大部分GBK项目的乱码问题,都是这几个地方出的错,大家按照页面→过滤器→tomcat→框架配置→数据库这个顺序一步步查,基本都能找到问题,别上来就乱改编码,越改越乱,整个项目保持统一的GBK,基本上就能解决90%以上的乱码问题了。
SSH框架乱码,GBK中文乱码,GBK项目中文乱码,表单提交乱码,SSH中文乱码,GBK编码乱码,SSH框架,中文乱码解决,老项目乱码,乱码解决方法
[Q]:SSH框架GBK项目表单提交中文一定乱码吗?
[A]:只要全链路统一GBK编码,不会出现乱码问题。
[Q]:哪个位置是最容易漏改的乱码诱因?
[A]:大部分人会漏改JSP页面的page指令编码声明。
[Q]:Spring字符编码过滤器必须开哪个参数?
[A]:必须把forceEncoding设为true,才能同时处理请求和响应编码。
[Q]:GET请求中文乱码要改哪里?
[A]:可以在tomcat的server.xml的Connector标签添加URIEncoding="GBK"。
[Q]:改不了tomcat配置怎么处理GET乱码?
[A]:可以手动对每个参数转码:new String(参数.getBytes("ISO-8859-1"),"GBK")。
[Q]:Struts2需要单独设置编码吗?
[A]:需要在struts.xml添加常量 。
[Q]:数据库存中文乱码要检查什么?
[A]:要检查库表编码是否为GBK,同时数据库连接url要加characterEncoding=gbk。
[Q]:代码里硬编码的中文乱码是哪里的问题?
[A]:是IDE保存文件时用错了编码,把IDE项目编码改成GBK重新保存即可。
首先说最基础也最容易漏改的地方,就是页面编码声明。很多老项目的JSP页面一开始没写对,或者只写了HTML部分没设置page指令的编码。
如果你的页面是JSP,最顶行一定要加上<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK" %>,HTML里的meta标签也要对应写成。别写混UTF-8,整个项目统一GBK才不会出问题,我一开始就是这里改混了,白折腾一个多小时。
改完页面,第二个要检查的就是过滤器。SSH项目一般都会配置字符编码过滤器,大部分人用的是Spring自带的CharacterEncodingFilter,打开你的web.xml看看。
这里要确认两个点,第一filter的encoding是不是设成了GBK,不是UTF-8;第二forceEncoding参数是不是设成了true,这个参数一定要开,不然过滤器只会设置请求编码,不会处理响应,乱码问题还是会存在。配置大概是这样:
然后filter-mapping要放在所有其他过滤器的最前面,拦截所有请求,别漏了/*的拦截规则,不然有些请求直接绕开过滤器,还是会乱码。
要是改完过滤器还是乱码,那就要看看get请求的问题了。很多老项目用tomcat,tomcat不同版本的默认编码不一样,老版本tomcat(比如tomcat 6、7)默认get参数编码是ISO-8859-1,就算你设了过滤器,过滤器默认只处理post请求,get请求的参数还是乱码。
这个问题改起来也简单,打开tomcat的server.xml,找到你项目对应的Connector标签,加上URIEncoding="GBK"就可以了。改完之后重启tomcat,get过来的中文参数就能正常解析了。要是你不方便改tomcat配置,也可以手动转码,拿到参数之后用new String(request.getParameter(name).getBytes("ISO-8859-1"),"GBK")转一遍,就是每个参数都要写比较麻烦,适合改不了全局配置的场景。
接下来要检查Struts2的编码配置,如果你的SSH框架用的是Struts2作为控制层,那struts.xml里也要设置对应的编码。
在struts.xml里加上
如果上面这些地方都改完,数据库存进去还是乱码,那就要检查数据库连接和库表编码了。GBK项目对应的数据库,库和表的编码都要设成gbk或者gbk_chinese_ci,别设成utf8mb4。
然后看你的数据库连接url,url后面要加上characterEncoding=gbk,比如jdbc:mysql://localhost:3306/test?characterEncoding=gbk,这个参数告诉JDBC用什么编码和数据库交互,漏加的话,存进去取出来都是乱码。我朋友那个项目就是这里出问题,前面改完前端和请求,结果数据库里全是乱码,找了好久才发现url没加编码参数。
还有一种比较少见的情况,就是文件本身编码不对,比如你把GBK项目放到IDE里,IDE默认用UTF-8保存了Java文件或者JSP文件,那代码里写死的中文都会变成乱码。这个时候要改IDE的编码设置,Eclipse里要把项目的文本编码改成GBK,IDEA也要在设置里把项目编码改成GBK,重新保存一遍文件就好了。
其实大部分GBK项目的乱码问题,都是这几个地方出的错,大家按照页面→过滤器→tomcat→框架配置→数据库这个顺序一步步查,基本都能找到问题,别上来就乱改编码,越改越乱,整个项目保持统一的GBK,基本上就能解决90%以上的乱码问题了。
SSH框架乱码,GBK中文乱码,GBK项目中文乱码,表单提交乱码,SSH中文乱码,GBK编码乱码,SSH框架,中文乱码解决,老项目乱码,乱码解决方法
[Q]:SSH框架GBK项目表单提交中文一定乱码吗?
[A]:只要全链路统一GBK编码,不会出现乱码问题。
[Q]:哪个位置是最容易漏改的乱码诱因?
[A]:大部分人会漏改JSP页面的page指令编码声明。
[Q]:Spring字符编码过滤器必须开哪个参数?
[A]:必须把forceEncoding设为true,才能同时处理请求和响应编码。
[Q]:GET请求中文乱码要改哪里?
[A]:可以在tomcat的server.xml的Connector标签添加URIEncoding="GBK"。
[Q]:改不了tomcat配置怎么处理GET乱码?
[A]:可以手动对每个参数转码:new String(参数.getBytes("ISO-8859-1"),"GBK")。
[Q]:Struts2需要单独设置编码吗?
[A]:需要在struts.xml添加常量
[Q]:数据库存中文乱码要检查什么?
[A]:要检查库表编码是否为GBK,同时数据库连接url要加characterEncoding=gbk。
[Q]:代码里硬编码的中文乱码是哪里的问题?
[A]:是IDE保存文件时用错了编码,把IDE项目编码改成GBK重新保存即可。
评论 (0)
