数据交互时中文乱码问题的解决方法总结
username=new String(username.getBytes("iso-8859-1"),"utf-8");
response.setContentType(“text/html;charset=utf-8”);
下面是关于数据传递过程的分析:
(1)、程序键数据交互时,有两种方式:
方式1: 以字节为单位 比如:JDK的IO实现
直接传递字节,与编码集无关。
方式2: 以字符为单位 比如:java程序与数据库的JDBC操作。
1)、传递的是 字节+编码集
2)、到mysql,取出字节与编码集,转换成字符。
3)、再将字符转换成自身编码方式对应的字节,然后存储。
4)、查看数据库时,再将存储的字节转换成自身编码格式的字符
(2)、浏览器向服务器提交数据(后台接收页面传过来的数据出现问题):
总结:
Java程序与Tomcat浏览器之间数据交互以 字符为标准,Tomcat与浏览器之间 以字节为标准.三者编码集不一样,所以乱码了。
设置Tomcat和浏览器的编码集都是UTF-8
response.setCharacterEncoding(“UTF-8”);//知识告知Toncat
response.setHeader(“content-type”,”text/html;charset=utf-8”);//告知Tomcat与服务器。
简化:
response.setContentType(“text/html;charset=utf-8”);
(3)、服务器向浏览器响应数据(后台传过去的数据在页面显示时出现乱码)
总结:
浏览器传递字节到Tomcat,乱码 Tomcat到程序显示Tomcat的文本,但是字节变了。
解决方法:
程序的字符按照ISO-8859-1转换成字节数组
byte[] buffer=msg.getBytes(“ISO-8859-1”);
字节数组按照UTF-8转换成字符
new String(buffer,”UTF-8”);
上述实现GET和POST通用。
简化方案:
request.setCharacterEncoding(“UTF-8”);只用于POST方式