servlet 中文问题解决

 

    1 起初Servlet 没有处理 request的编码 即 没有
        request.setCharacterEncoding("UTF-8");
    这中情况下,提交过来的中文,通过servlet处理后,显示在页面上,正常
    但是在Serlvet里,用System.out.println()打印的结果是乱码,这其实说明在java代码使用的字符串,其实是不正确的,不能进行有效的比较判断和处理。
    2 在Servlet里添加
        request.setCharacterEncoding("UTF-8");
    这时System.out.println的输出是正常的,但是页面的出现乱码
    这说明java代码里处理的字符串是正确的
    3 在Servlet里添加
 response.setContentType("text/html; charset=UTF-8");
    全ok了
理论:
    1 encodingURI处理过后的字符串 应当 被当作utf8编码过的处理
    2 Serlvet 在 默认(request.getCharacterEncoding() == null时) 认为request 的编码是“ISO-8859-1”
    3 浏览器处理服务器的消息会根据 Httpresponse的头的contentType判断采用哪种编码。

解释:
    过去框架里有个处理request的Filter,其中只有一句有效的代码,即
    request.setCharacterEncoding("UTF-8");
    而我们的响应总是通过 struts action forward到 jsp 完成的,而jsp 中肯定会有 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    其实就相当于 Sevlet里 的response.setContentType("text/html; charset=UTF-8");
注释:
    根据个人理解(依据jsp标准描述,并没有明确说明)
    pageEncoding="UTF-8" 是告诉jsp容器将jsp转换成为java Servlet代码的时候使用什么字符集解释jsp文件。
 
后记:
    字符集,编码属于国际化的问题,是java的基础问题。也许太基础了,总是被程序员遗忘。但如果基础的问题处理不好,是会产生大麻烦的。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值