zoukankan      html  css  js  c++  java
  • 乱码解决

     

     

    编写java web的程序,不可避免都要处理编码问题,最常见的问题就是中文乱码

    大概的思路就是重新编码为gbk或者gb2312,分两种情况

    一是get和post形式

    二是AJax 形式

    第一种:GET和POST,取决于你的页面编码,如果你的页面编码为iso8859_1

    使用:String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");

    或者    String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GB2312");

    但是,这里要注意,必须保证你的页面编码也是iso8859_1的,因为,上面的代码的意思是先将你的字符串变为iso8859_1字节流,

    然后再转化为GBK编码,如果你页面传过来的编码是utf-8,那么按照上面的方法就会出现:???乱码

    你页面是utf-8的,就要使用如下编码:

    String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GBK");

    或者    String str= new String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312");

    总之get  post 原则很简单,页面什么编码就转化什么字节流转化编码

    第二:Ajax传值

    这个比较麻烦,据测试,不同的浏览器有不同的对中文编码,怎么办呢?

    我们可以采用js的encodeURI()进行统一的编码,然后在后台进行统一的解码

    对应的java解码代码:

    str= java.net.URLDecoder.decode(str, "UTF-8");

    当然,因为他是utf-8编码,所以也可以采用第一种get post 介绍的方法解码(据测试,用 String(req.getParameter("str").toString().getBytes("utf-8"), "GB2312")解码js的encodeURI()时,会出现乱码,所以还是老老实实的使用java.net.URLDecoder.decode(str, "UTF-8");)

    不好意思,刚刚查了资料,上面讲的Get方式有错:

    Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

    所以,对于使用get方式传值的时候,统一使用String str= new String(req.getParameter("str").toString().getBytes("iso8859_1"), "GBK");当然,前提是你服务器是tomcat

  • 相关阅读:
    LeetCode15题: 寻找三数和,附完整代码
    LeetCode 11 水池蓄水问题
    分布式初探——分布式事务与两阶段提交协议
    高等数学——讲透求极限两大方法,夹逼法与换元法
    书籍推荐——一本老书,吴军老师《数学之美》
    概率统计——期望、方差与最小二乘法
    算法浅谈——递归算法与海盗分金问题
    机器学习基础——带你实战朴素贝叶斯模型文本分类
    线性代数精华——从正交向量到正交矩阵
    LeetCode10 Hard,带你实现字符串的正则匹配
  • 原文地址:https://www.cnblogs.com/challenge51all/p/3115433.html
Copyright © 2011-2022 走看看