zoukankan      html  css  js  c++  java
  • request.getparameter() 获取中文出现乱码 问题

    http请求是以ISO-8859-1的编码来传送url的

    如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送
    如: 中 的UTF-8编码为:E4 B8 AD在请求时为%E4%B8%AD字节之间是%分隔
    那么服务器收到这段字节流后,必须将它转成相应的字符,平时所使用的request.getParameter("name")直接得到了字符串,
    那么从字节流到字符流这个过程系统己经帮助我们完成了(乱码的产生由此开始)类似下面的程序:将汉字"中"的UTF-8形式转成汉字
    public class EncodingTest {
     
    public static void main(String[] args) {
     
    String utf_string = "E4%B8%AD";//中的UTF-8编码,三个字节表示,用%分开
    String[] utf_array = utf_string.split("%");
    byte[] utf_byte = new byte[utf_array.length];
    for(int i=0;i<utf_array.length;i++){
    utf_byte[i] = (byte)Integer.parseInt(utf_array[i], 16);
    }
    try {
    System.out.println(new String(utf_byte,"UTF-8"));
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    请注意段代码:new String(utf_byte,"UTF-8")它将字节流以UTF-8的编码还原为字符串
    但它使用的前提条件是utf_byte必须是utf-8的字节流,
    如果这样:
    String aa = "中";
    bb = aa.getBytes("ISO-8859-1");
    new String(bb ,"UTF-8")肯定是乱码了
    也就是说一个字符串以什么样的编码转换成字节流,就必须以什么样的编码进行还原
    bb=aa.getBytes("UTF-8")就必须new String(bb,"UTF-8")否则乱码言归正传:
    url通过iso-8859-1传输,服务器收到这个字节流,默认会以ISO-8859-1来将这个字节流还原成相应的字符串,
    就如同这样:
    客户端:bb = aa.getBytes("UTF-8");
    到了服务器:cc = new String(bb,"ISO-8859-1")还原字节流为节符串
    request.getParameter("");获取到这个cc,那么cc当然乱码了
    所以就产生了这样的做法:new String(request.getParameter("").getBytes("ISO-8859-1"),"UTF-8")还原成原始字符串
    将乱码字符串还原成原始的字节流,重新按UTF-8来编码.
  • 相关阅读:
    BF算法和KMP算法
    Python课程笔记 (五)
    0268. Missing Number (E)
    0009. Palindrome Number (E)
    0008. String to Integer (atoi) (M)
    0213. House Robber II (M)
    0198. House Robber (E)
    0187. Repeated DNA Sequences (M)
    0007. Reverse Integer (E)
    0006. ZigZag Conversion (M)
  • 原文地址:https://www.cnblogs.com/common1140/p/3751552.html
Copyright © 2011-2022 走看看