乱码问题的根源:(以web程序为例子,eclipse来查看编码,设置UTF-8)
解决方案:所有文件或者字符串的编码方式一致
(1)查看web页面文件的编码方式:
(2)web页面的<head>写上
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
(3)特别注意web里面的<form>提交时submit,带有中文的字段会自动转码,以Tomcat为例,会转成“ISO8859-1”方式,所以在接受数据的时候还要继续转回你想要的编码方式
转码方式
public String changeToUTF8(String str) { if (str == null) { return ""; } try { str = new String(str.getBytes("ISO8859-1"), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return ""; } return str; }
(4)同样的,你处理字符串的代码所在的文件也是要统一编码的
(5)最后,在你返回字符串的编码还是要统一
response.setCharacterEncoding("UTF-8");
(6)如果有数据库操作,建表时,里面的字段名要设置为你要的编码,例如
(7)数据库的默认编码方式还要注意一下(这种乱码方式不常见,可以忽略),输入show variables likes "char%";来查看
总结:乱码出现最多的是<form>提交的时候,往往很多人不知道它会自动转码,就会出现乱码问题,另外可以通过URL加密的方式来解决URL传递中文的时候的乱码问题,本人觉得麻烦,就不介绍了。还有在传递的过程中,可以用拦截器来捕获,来进行转码,这种方式还是觉得有点麻烦,具体去找JSP的书看看拦截器是怎样使用的。我介绍的方法已经可以解决我的乱码问题,而且觉得是比较简单的一种方式。