主题:解决Servlet响应消息的中文输出乱码问题
tomcat的后台日志信息乱码:conf文件夹,有一个logging.properties文件(日志参数设置文件)
一、中文编码
1、输入码
键盘上输入某几个键,电脑上就输入某个汉字,这个几个键就是这个汉子的输入码
2、机内码
机器内部,这个汉字用一个什么数字来存放,这个数字就是这个汉字的机内码
存放长度:
一一对应:
汉字内码种类:不同研究结构发明了很多内码规则,不同编码,同一汉字是用不同的内码表示
3、显示码
一个汉字在屏幕上显示的笔迹,假如用8*8的方格来放这个汉字,笔迹通过格子对应位为1,否则为0,8个字节一起表示显示码,很显然一个汉字有无数个显示码
某种风格的所有汉字的显示码的集合,我们称为字体文件,字体安装到操作系统中,这个电脑就能显示这个字体。
4、乱码产生原因
用A编码保存的汉字,你使用B编码来解析,就会出现乱码
例如A编码中,中字机内码为6364,B编码中?的机内码是6364
二、httpservletresponse应用------中文乱码
1、响应response
响应头:可以指定浏览器接收到我这个响应消息,用哪个编码来解析
响应体:response.getWriter().write(“中国”);中国两个字是写在响应体中,如果在写时没有指定编码格式,则默认使用ISO8859-1编码来把这个两个汉字的内码写在响应体中
浏览器解析响应消息:如果没有指定,则默认是GB2312编码来解析
2、解决办法
第一步:设置响应头:告诉浏览器请使用对应的编码方式来解码
第二步:设置响应体的编码方式,后面往响应体中写内容采用这个编码方式
response.setCharacterEncoding("utf-8");//这表示往响应体中写文本内容,用utf-8编码
response.setHeader("Content-Type","text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.write("中国");