解决中文输出乱码问题:
由于计算机中的数据都是由二进制的形式进行储存的,当传输文件时,就会发生字符与字节之间的转换,字符与字节之间的转换是通过查码表完成的。将字符转换成字节的过程称为编码,将字节转换为字符的过程称为解码,如果解码和编码使用的码表不一致,就会导致乱码问题。例如:
的结果为:
从图上可知,在浏览器的显示内容为"??",说明发生了乱码的问题。此处产生乱码的原因是response对象的字符输出流在编码时采用的是ISO-8859-1的字符码表,该码表并不兼容中文,会将“中国”编码为“63 63”(在ISO-8859-1的码表中查不到的字符就会显示成63)。当浏览器对接收到的数据进行解码时,会采用默认的码表GB2312,将“63”解码为“?”,因此浏览器将“中国”两个字显示成了“??”。
为了解决上面的错误,可以使用HttpServletResponse接口中的setCharacterEncoding()方法,该方法用于设置字符的编码方式,加上该方法之后虽然不是“??”但是也不是“中国”,这是因为浏览器使用的解码方式为GB2312,这是要加入setHeader()方法来通知浏览器使用“utf-8”来解码;具体方法如下:
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type","text/html;charset=utf-8");
结果为:
还有一种方案是用:
response.setContentType("text/html;charset=utf-8");这种方案包括上个方案的两个功能;
至此,上述两个方案用于解决中文输出乱码问题;
解决请求参数的中文乱码问题:
使用 request.setCharacterEncoding("utf-8");即可
为了避免出现乱码问题,可以在使用Servlet中先将
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
方法写上,这样就可以避免出现乱码现象;