解决乱码问题

  由于计算机中的数据都是以二进制形式存储的,因此,当传输文本时,就会发生字符与字节之间的转换。字符与字节之间的转换是通过查码表完成的,将字符转换成字节的过程称为编码,将字节转换成字符的过程称为解码,如果编码和解码使用的码表不一致,就会导致乱码问题。

创建servlet     在test项目的cn.itcast.response包中编写一个名为ChineseServlet的类,在该类中定义一个中文字符串,然后使用字符输出流输出。

配置映射信息,查看运行结果

在web.xml中配置完成ChineseServlet的映射后,启动Tomcat服务器,在浏览器的地址栏输入地址:“http://localhost:8080/chapter/ChineseServlet”访问ChineseServlet,浏览器的显示结果为“??”,说明发生了乱码问题。实际上此处产生乱码的原因是response对象的字符输出流在编码时,采用的时ISO8859-1的字符码表,该码表并不兼容中文,会将“中国”编码为“63 63”(在ISO8859-1的码表中查不到的字符就会显示63)。当浏览器对接收到的数据进行解码时,会采用默认的码表GB2312,将“63”解码为“?”,因此,浏览器将“中国”二字显示成了“??”。

 为了解决上述编码错误,在HttpServletResponse接口中,提供了一个setCharacterEncoding()方法,该方法用于设置字符的编码方式,在设置内容前加一行代码,设置字符编码使用的码表为UTF-8。

在浏览器的地址栏输入地址:“http://localhost:8080/chapter/ChineseServlet”再次访问ChineseServlet,浏览器显示结果不再为?,但是依然乱码。通过分析发现,这是由于浏览器解码错误导致的,因为response对象的字符输出流设置的编码方式为UTF-8,而浏览器使用的解码方式为GB2312。对于此类错误,可以通过修改浏览器的解码方式解决。对于IE浏览器,点击菜单栏中的查看--》编码--》Unicode(UTF-8)选项,将浏览器的编码方式设置为UTF-8之后浏览器显示结果为“中国”,没有出现乱码。由此说明,通过修改浏览器的编码方式可以解决乱码,但是,这样的做法仍然是不可取的,因为用户每次去修改浏览器编码太麻烦,为此,在HttpServletResponse对象中,提供了两种解决乱码的方式:
方式一:

 方式二: 

通常情况下,为了使代码更加简洁,会采用第二种方式。接下来对ChineseServlet进行修改,使用第二种方式解决乱码问题。启动Tomcat服务器,在浏览器 在浏览器的地址栏输入地址:“http://localhost:9999/chapter/ChineseServlet”重新访问ChineseServlet,浏览器显示出了正确的中文字符。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值