常见的html、服务器、浏览器之间连接传输时中文乱码情况
-
html文件传给服务器参数,发生中文乱码
原因解释
在html文件中的form表单或者a标签都可以响应服务器,并传给一些参数,但是由于Tomcat服务器内部使用的是ISO-8599编码,这种编码识别不了中文,所以默认情况下传入的参数要是中文就会乱码
解决办法
先获得传入的参数name在ISO-8599编码下的字节
再将得到的字节用utf-8编码形式转化成字符串byte[] bname=name.getBytes("ISO-8859-1");
name=new String(bname,"UTF-8");
-
服务器响应给浏览器内容,中文乱码
原因解释
Tomcat服务器响应给浏览器内容时,是先将写的内容全部放到缓存区,然后服务器再从缓存区读取,由于Tomcat服务器内部使用的编码是ISO-8859,所以读取的过程并不能识别中文,如果浏览器没有自己解析加载调整编码的话,就会出现中文乱码
解决办法
只需要一步设置即可,在缓存区存内容之前设置好存放的编码格式
response.setCharacterEncoding("UTF-8")
-
通常要让浏览器能够识别传入的中文,仅需上面一步是不行的,因为上面只是解决了在服务器内部存到缓存区并且读取时中文乱码的问题,但是没有规定响应给的浏览器是以什么编码接收
解决办法
设置响应头的ContentType属性,告诉浏览器以什么形式接收内容并使用什么编码
response.setContentType("text/html;charset=UTF-8");
值得注意的是,使用了
response.setContentType("text/html;charset=UTF-8");
就不用再使用
response.setCharacterEncoding("UTF-8")
告诉缓存区使用什么编码缓存了,因为上面的那个方法告诉浏览器使用UTF-8的编码,自然服务器内部的缓存区也使用UTF-8的编码。