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

     

  • 相关阅读:
    pyecharts 0.5.11介绍
    Python并发写入一个文件
    subprocess模块详解(二)
    subprocess模块详解(一)
    大数据环境下的数据仓库建设
    Java计算字符串相似度
    Pandas matplotlib无法显示中文解决办法
    Hadoop YARN参数介绍(四)[推荐]
    Hadoop YARN参数介绍(三)
    wsl2 ubuntu20.04 上使用 kubeadm 创建一个单主集群
  • 原文地址:https://www.cnblogs.com/bobodeboke/p/4546571.html
Copyright © 2020-2023  润新知