网页输出中文乱码问题

写了一个程序,读取一个html文件 然后输出到浏览器 , 发现输出后浏览器的中文显示为乱码。

修改前主要代码如下:

public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
FileInputStream in = new FileInputStream("D:\\Workspaces_MyEclipse\\SimpleDemo\\WebRoot\\NewFile.html");

BufferedReader br = new BufferedReader(new InputStreamReader(in));

//BufferedReader br = new BufferedReader(new InputStreamReader(in,"utf-8"));
res.setContentType("text/html");
//String encoding = res.getCharacterEncoding();
//res.setCharacterEncoding("utf-8");


PrintWriter out = res.getWriter();

while(true){
String line = br.readLine();
if(line == null){
break;
}
out.println(line);
}

}


之所以造成乱码是因为中文编码不同导致的 ,所以我们只要保证从读取到输出 编码一致即可。


这个过程包括 : 新建html文件、读取html、输出到浏览器、浏览器显示

分别检查这几个步骤的编码,

1.查看html文件,编码为“utf-8" 

2.读取html文件,代码如下

FileInputStream in = new FileInputStream("D:\\Workspaces_MyEclipse\\SimpleDemo\\WebRoot\\NewFile.html");

BufferedReader br = new BufferedReader(new InputStreamReader(in));

由于是在中文系统下开发,操作系统默认的字符集编码为GBK,所以是以GBK编码来读取utf-8编码的文件的 ,这样就造成了读取进来的数据已经是乱码了,后续自然是乱码。

3.输出到浏览器,代码如下

PrintWriter out = res.getWriter();

由out负责输出,out的编码来自res,即ServletResponse ,通过放开本行注释代码

//String encoding = res.getCharacterEncoding();       我们发现encoding的值是 ISO-8859-1 ,此处也造成了编码的不同。

4.查看浏览器显示时的编码发现也是utf-8 (浏览器显示编码用户可调默认为utf-8)


经过以上分析我们发现问题出在第2步读取文件时  和 第3步 向浏览器输出时编码不同造成了显示成乱码,

解决方案:将第二步读取文件时的编码设置成utf-8 ,即将

BufferedReader br = new BufferedReader(new InputStreamReader(in)); 替换成 //BufferedReader br = new BufferedReader(new InputStreamReader(in,"utf-8"));

再将第3步的res的编码设置成utf-8 就保证了整个流程都统一使用utf-8编码。代码如下

//res.setCharacterEncoding("utf-8");

乱码成功解决掉了。将上面的代码注释都放开 就是正确处理编码的正确代码了。

其他乱码问题处理思路都类似,我们举一反三即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值