`
哈达f
  • 浏览: 121399 次
  • 性别: 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类型的方法处理乱码很简单.........

分享到:
评论

相关推荐

    java中文乱码问题详解--- java中文乱码问题详解

    ### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...

    jsp中文乱码问题jsp中文乱码问题详解

    jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...

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

    总结,解决JSP中文乱码问题的关键在于理解不同环节的编码规则,并确保它们之间的一致性。从HTML页面编码、JSP文件编码、URL参数处理到服务器端接收参数的编码,每个环节都需要细心检查和设置。遇到问题时,首先要...

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

    ### MySQL中文乱码解决方案详析 #### 背景与挑战 在使用MySQL数据库的过程中,中文乱码问题一直是困扰很多开发者的难题。特别是在不同的服务器环境、数据库版本间迁移时,这种问题尤为突出。本文将详细介绍几种...

    Linux下中文文件名乱码问题的详解 - CSDN博客1

    总结来说,解决Linux下中文文件名乱码问题的关键在于: 1. 确保Linux系统支持中文编码,如GBK和UTF-8。 2. 在处理文件名时进行适当的编码转换,特别是在跨平台操作时。 3. 如果在编程中处理文件名,可能需要编写或...

    hadoop中文乱码问题

    【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...

    Java乱码问题解决

    ### Java乱码问题详解与解决方案 #### 一、问题背景 在Java开发过程中,尤其是在处理中文字符时,经常遇到字符编码不一致导致的乱码问题。由于Java默认使用Unicode编码,而在中国大陆地区,常见的字符集为GB2312...

    PLSQL中文乱码问题解决方案

    ### PLSQL中文乱码问题解决方案 #### 背景与问题描述 在处理数据库操作时,经常遇到的一个问题是中文字符的显示出现乱码的情况。这种情况不仅会影响数据的正确读取,还会导致用户界面的不友好体验。对于使用PL/SQL...

    Ubuntu11.10文本乱码问题解决

    ### Ubuntu11.10文本乱码问题解决:详尽指南 #### 背景与问题阐述 在使用Ubuntu 11.10系统时,不少用户遇到一个令人头疼的问题——文本文件出现乱码。这一现象主要表现为打开本地或网络上的文本文件(如.txt格式)...

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

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

    Mysql插入中文乱码问题解决

    ### MySQL 插入中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在使用 MySQL 数据库处理中文数据时,经常会遇到一个让人头疼的问题——中文乱码。中文乱码不仅影响用户体验,还可能导致数据丢失或者错误...

    ADB中文乱码分析解决

    通过上述步骤,我们可以有效地解决ADB中文乱码问题。关键在于理解不同环境下的字符编码差异,并采取合适的措施进行调整。对于开发者而言,保持对各种编码格式的基本了解是非常重要的,这有助于快速诊断并解决类似的...

    smartupload解决中文乱码

    4. 使用支持中文乱码解决方案的`SmartUpload`库。 通过以上步骤,可以有效地避免在使用`SmartUpload`进行文件上传时出现中文乱码的问题,确保数据的完整性和正确性。在实际开发中,对字符编码的理解和正确使用是...

    mysql乱码问题解决

    ### MySQL中文乱码问题解析与解决方案 #### 一、乱码原因分析 在MySQL数据库中遇到中文乱码问题,通常可以归结为以下几个方面: 1. **Server本身的设定问题**:比如服务器使用的字符集仍停留在老旧的`latin1`而非...

    设置乱码问题(设置乱码问题)

    ### 设置乱码问题详解 #### 一、理解乱码问题 在进行数据库操作时,可能会遇到数据呈现为不可读字符的现象,这种情况通常被称为“乱码”。出现乱码的原因多种多样,比如字符集设置不一致、编码转换错误等。解决...

    mac MySQL中文乱码解决办法

    本文将详细介绍如何解决macOS系统下MySQL中文乱码的问题,通过修改配置文件my.cnf来调整MySQL的字符集,确保中文能够正常显示。 ### 解决方案详解 #### 步骤一:定位my.cnf配置文件 首先,需要找到或创建MySQL的...

    java解决解决get中文乱码问题

    ### Java解决GET请求中文乱码问题详解 在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用...

    linux乱码问题的解决办法

    ### Linux乱码问题解决方案 #### 一、理解乱码产生的原因 在Linux环境中,乱码问题通常是由于不同操作系统之间的字符编码差异所导致的。Windows系统默认采用GBK编码(早期使用GB2312),而Linux则普遍使用UTF-8编码...

    jsp中文乱码的解决方案

    **JSP中文乱码问题详解** 在开发基于Java的Web应用程序时,JSP(Java Server Pages)页面常常会遇到中文乱码的问题。这通常发生在数据的输入、处理或输出阶段,给用户界面带来不便,也增加了开发者的调试难度。本文...

Global site tag (gtag.js) - Google Analytics