`
哈达f
  • 浏览: 115907 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

乱码问题解决详解

 
阅读更多

编码的时候不能错,错了就拿不回来数据了,比如;String name = new String("犀利".getBytes("ISO-8859-1"));

编码的时候就错了,用的是ISO-8859-1,这样的Bytes数据是不可取的,不管以什么编码去解析,都不能取回犀利。

所以能解决乱码的问题必须是第一步编码正确:如

 

 

Java代码 
  1. String name = new String("犀利".getBytes("GBK"),"ISO-8859-1");  
  2. name = new String(name.getBytes("ISO-8859-1"),"GBK");  

 

 这样就能正确的显示出犀利。上面的编码正确,然后用的是ISO-8859-1去解码。所以第一次解码得出的name是乱码,于是我们把得到的name乱码再次以ISO-8859-1去编码,逆向回去,得到的是GBK的Byte编码数据,然后再按照正确的对应的GBK编码方式解码,所以就能得到犀利。

 

看看我们的乱码问题:第一个页面:

 

Java代码 
  1. package com.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.PrintWriter;  
  5.   
  6. import javax.servlet.ServletException;  
  7. import javax.servlet.http.HttpServlet;  
  8. import javax.servlet.http.HttpServletRequest;  
  9. import javax.servlet.http.HttpServletResponse;  
  10.   
  11. @SuppressWarnings("serial")  
  12. public class Login extends HttpServlet {  
  13.   
  14.     @Override  
  15.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  16.             throws ServletException, IOException {  
  17.         // TODO Auto-generated method stub  
  18.         doPost(req, resp);  
  19.     }  
  20.   
  21.     @Override  
  22.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  23.             throws ServletException, IOException {  
  24.           
  25.         resp.setContentType("text/html;charset=utf-8");  
  26. /*页面的编码我们设置成为了UTF-8,所以当我们提交表单的时候get的数据自然也就按照UTF-8的编码方 
  27. 式去编码也就是相当于"数据".getBytes("ISO-8859-1") 然后获得字节流数据,然后在网络上进行传递, 
  28. 也就是action到了里一个页面。*/  
  29.   
  30.         PrintWriter pw = resp.getWriter();  
  31.   
  32.         pw.println("<html>");  
  33.         pw.println("<body>");  
  34.         pw.println("<form action=check method='get'>");  
  35.         pw.println("用户名:<input type='text' name='userName'/><br/>");  
  36.         pw.println("密     码:<input type='password' name='passW'/><br/>");  
  37.         pw.println("<input type=submit value='提     交'/>");  
  38.         pw.println("</form>");  
  39.         pw.println("</body>");  
  40.         pw.println("</html>");  
  41.     }  
  42. }  

 

 第二个页面:

 

Java代码 
  1. package com.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.sql.Connection;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8.   
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServlet;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13. import javax.servlet.http.HttpSession;  
  14.   
  15. public class CheckLg extends HttpServlet {  
  16.   
  17.     /** 
  18.      *  
  19.      */  
  20.     private static final long serialVersionUID = 7384793825684059007L;  
  21.   
  22.     @Override  
  23.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  24.             throws ServletException, IOException {  
  25.         // TODO Auto-generated method stub  
  26.         doPost(req, resp);  
  27.     }  
  28.   
  29.     @Override  
  30.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  31.             throws ServletException, IOException {  
  32.         // TODO Auto-generated method stub  
  33.         Connection con;  
  34.         PreparedStatement pst;  
  35.         ResultSet rs;  
  36.   
  37.         resp.setContentType("text/html;charset=utf-8");  
  38.         String userName = new String(req.getParameter("userName").getBytes(  
  39.                 "ISO-8859-1"), "GBK");  
  40. /*由于tomcat的默认的解码方式是ISO-8859-1,所以我们要以ISO-8859-1逆向编码,然后获得 
  41. 以UTF-8编码的字节数组,得到字节数组后,我们就可以去解码了,用什么来解码呢?因为是UTF-8的 
  42. 的方式去编码,所以必须以Utf-8的方式去解码!这里我们却用了GBK解码,所以解码出来的是乱码!*/  
  43.         System.out.println("--------"+userName+"----------");  
  44.           
  45. <span style="white-space: pre;">    </span>}  
  46. }  

 

对于sendRedirect的乱码问题是这样解决的:

 

 

Java代码 
  1. String infos = URLEncoder.encode("请重新登录","utf-8");  
  2. resp.sendRedirect("login?info="+infos);  

 先用URLEncoder去编码,并且指定编码的编码表如UTF-8

 

当第二页面接收到数据的时候就会自动的URLDecoder得到我们的字节流数据,然后tomcat又根据自己的对get的方法的ISO-8895-1去解码,所以产生了乱码,

这个时候我们就要重新以ISO-8859-1去解码,获得之前的字节数组,然后再进行正确的UTF-8编码则得到正确的结果。

 

 

Java代码 
  1. String info = req.getParameter("info");  
  2. String erro= new String(info.getBytes("ISO-8859-1"), "UTF-8");  
至于post类型的方法处理乱码很简单.........

分享到:
评论

相关推荐

    JSP出现中文乱码问题解决方法详解.docx

    JSP出现中文乱码问题解决方法详解.docx

    详解多种方法解决MYSQ中文乱码

    MySQL中各种中文乱码,着实让人头痛,详解一番如何多种方法解决它

    mysql解压版配置详解,解决中文乱码问题

    mysql解压版详细配置说明,及解决中文乱码问题 含更改root初始密码方式。

    JSP出现中文乱码问题解决方法详解

    下面来逐一解决其中的乱码问题。 一、JSP页面中文乱码 在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。 先看一个JSP程序: &lt;&#37;@ page language=java ...

    SecureCRT中文乱码 两种解决方法【方法详解】.docx

    SecureCRT 中文乱码解决方法详解 SecureCRT 是一款功能强大且流行的终端仿真程序,支持 SSH(SSH1 和 SSH2)、Telnet 和 rlogin 协议。然而,在使用 SecureCRT 连接 Linux 服务器时,中文字符可能会出现乱码的情况...

    smartupload解决中文乱码

    解决使用smartupload上传普通字段中文乱码问题,在servlet中可以通过smart.getRequest().getParameter()直接获取

    ubuntu mysql中中文乱码问题.docx

    Ubuntu MySQL 中文乱码问题解决方案 在 Ubuntu 系统中,MySQL 数据库中文乱码问题是一个常见的问题。乱码问题可能是由于 MySQL 数据库的字符编码设置不正确所致。解决这个问题需要对 MySQL 数据库的字符编码进行...

    linux下python中文乱码解决方案详解

    主要介绍了linux下python中文乱码解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    解决Python命令行下退格,删除,方向键乱码(亲测有效)

    一、出现原因:readline模块没有安装 二、解决方式: # 安装readline模块 yum -y install readline-devel # 进入Python安装目录 ... 您可能感兴趣的文章:解决PyCharm控制台输出乱码的问题详解Python

    Python中文乱码详解参考.pdf

    Python中文乱码详解参考.pdf 标题:Python中文乱码详解参考 ...本文详细介绍了字符编码的概念、来龙去脉、编码规则、多字节字符集、Unicode/UCS、CodePage等知识点,并提供了Python中文乱码解决办法。

    jsp 乱码详解(jsp,mysql,tomcat)

    jsp 乱码详解(jsp,mysql,tomcat) 基本涵盖所有的乱码解决方法。使用的utf-8作为例子

    Linux php出现中文乱码的解决方法.docx

    Linux PHP 中文乱码解决方法详解 Linux PHP 中文乱码问题是 PHP 开发中常见的问题之一。它是由于字符编码设置不当引起的。今天,我们将探讨 Linux PHP 中文乱码的解决方法。 一、修改 PHP 配置文件 在 Linux 中,...

    JDBC连接mysql处理中文时乱码解决办法详解

    JDBC连接mysql处理中文时乱码解决办法详解 近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb...

    详解Linux中文乱码问题终极解决方法

    本篇文章主要主要介绍了详解Linux中文乱码问题终极解决方法,非常具有实用价值,需要的朋友可以参考下。

    Python中文乱码详解.pdf

    本文将详细介绍 Python 中文乱码的问题,包括字符编码的相关支持,Python 2 和 Python 3 中的字符编码差异,以及解决方法。 字符编码的概念 字符是抽象符号和数字成对编码用于在计算机系统中表示的信息单位。字符...

    redis 解决key的乱码问题,并清理详解

    主要介绍了redis 解决key的乱码问题,并清理详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Debian 6中文乱码解决方案.docx

    本文档提供了 Debian 6 中文乱码解决方案,旨在帮助用户解决 Debian 6 中文乱码问题。该解决方案分为四个步骤,分别是将宋体或新宋体复制到/usr/share/fonts/truetype/目录下,手动挂载 U 盘,设置字体权限,和重启...

Global site tag (gtag.js) - Google Analytics