javaee中的中文乱码处理

浏览器正常显示

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

response.setCharacterEncoding("utf-8");

服务器端正常接收

中文乱码有三种情况

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

2)超链接(get);链接?参数名=值(中文)

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

乱码产生的根本原因

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

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");

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

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

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

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

二、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对象初始化之前进行编码的设置。

 

原文地址:https://www.cnblogs.com/bobodeboke/p/4546571.html