javaee中的中文乱码处理

浏览器正常显示html

response.setContentType("text/html;charset='utf-8'")java

response.setCharacterEncoding("utf-8");web

 

服务器端正常接收浏览器

中文乱码有三种状况服务器

1)表单提交(get方式,post方式):input表单输入为中文ide

2)超连接(get);连接?参数名=值(中文)工具

3)sendRedict(get) 连接?参数名=值(中文)post

乱码产生的根本缘由编码

请求发送时:浏览器有默认的编码,经上述设置以后,是utf-8。url

web服务器接收时候,也有一种编码,因为服务器通常是国外开发的,所以默认的编码方式通常是iso-8859-1

浏览器与服务器的编码方式不一致,于是产生乱码

问题解决方法

1,若是是表单提交,方法是post(表单提交应当尽可能选择post)

此时经过http请求体传递参数,由于服务器会将对应的http请求头解析并进一步包装为request对象,所以利用request.setCharacterEncoding方法,指定web服务器接受端的编码方式,如request.setCharacterEncoding("utf-8")

2,若是是表单提交,方法是get

此时经过连接传递参数,针对乱码状况,能够利用

String value=new String(request.getParameter("参数名").getBytes("iso-8859-1"),"utf-8")来解决

这种状况能够封装成一个工具类 

package com.bobo.utils;

import java.io.UnsupportedEncodingException;

public class MyTools {
    
    public static String getNewString(String str){
        
        try {
            return new String(str.getBytes("iso-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

}
乱码工具类

 3,超连接乱码,sendRedict的乱码本质上也是get请求,解决方法同2

4,若是是ie6及如下版本,上述方法中涉及到get方法时依然有可能出现乱码,此时的解决方法是:

对要发送的中文进行编码

String info=java.net.URLEncoder.encode("你好","utf-8");

response.sendRedict("url路径?参数名="+info);

第三个文件接收

String info=new String(request.getParameter("参数名").getBytes("iso-8859-1"),"utf-8");

 

补充关于乱码的相关知识点:

1、当咱们下载文件的时候,可能提示框是中文乱码,此时的解决方法是:

String temp=java.net.URLEncoding.encode("中文文件名","utf-8")

response.setHeader("Content-Disposition","attachment;filename="+temp);

2、request.getRequestDispatcher()以后出现乱码

对于某一个页面,在单独访问的时候是正常的,但是讲过上述语句转向以后出现乱码 

 在Servlet中,通常有参数传递的话,会设置页面接收参数和传递参数的编码。即下面两句: 

 

       request.setCharacterEncoding("UTF-8");
       response.setCharacterEncoding("utf-8"); 

 

       通常状况下,大部分都会想到使用这个,可是这两句代码的位置有时却容易被忽视,我今天就是忽视了这两句的位置。正确的写法是,request.setCharacterEncoding("UTF-8");    response.setCharacterEncoding("utf-8");要放在PrintWriter out = response.getWriter();的后面。由于out对象初始化以后,再设置编码已经没有任何意义了!因此必须在out对象初始化以前进行编码的设置。

相关文章
相关标签/搜索