编码的时候不能错,错了就拿不回来数据了,比如;String name = new String("犀利".getBytes("ISO-8859-1"));
编码的时候就错了,用的是ISO-8859-1,这样的Bytes数据是不可取的,不管以什么编码去解析,都不能取回犀利。
所以能解决乱码的问题必须是第一步编码正确:如
- String name = new String("犀利".getBytes("GBK"),"ISO-8859-1");
- name = new String(name.getBytes("ISO-8859-1"),"GBK");
这样就能正确的显示出犀利。上面的编码正确,然后用的是ISO-8859-1去解码。所以第一次解码得出的name是乱码,于是我们把得到的name乱码再次以ISO-8859-1去编码,逆向回去,得到的是GBK的Byte编码数据,然后再按照正确的对应的GBK编码方式解码,所以就能得到犀利。
看看我们的乱码问题:第一个页面:
- package com.servlet;
-
- import java.io.IOException;
- import java.io.PrintWriter;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- @SuppressWarnings("serial")
- public class Login extends HttpServlet {
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- doPost(req, resp);
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- resp.setContentType("text/html;charset=utf-8");
-
-
-
-
- PrintWriter pw = resp.getWriter();
-
- pw.println("<html>");
- pw.println("<body>");
- pw.println("<form action=check method='get'>");
- pw.println("用户名:<input type='text' name='userName'/><br/>");
- pw.println("密 码:<input type='password' name='passW'/><br/>");
- pw.println("<input type=submit value='提 交'/>");
- pw.println("</form>");
- pw.println("</body>");
- pw.println("</html>");
- }
- }
第二个页面:
- package com.servlet;
-
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
-
- public class CheckLg extends HttpServlet {
-
-
-
-
- private static final long serialVersionUID = 7384793825684059007L;
-
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- doPost(req, resp);
- }
-
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
-
- Connection con;
- PreparedStatement pst;
- ResultSet rs;
-
- resp.setContentType("text/html;charset=utf-8");
- String userName = new String(req.getParameter("userName").getBytes(
- "ISO-8859-1"), "GBK");
-
-
-
- System.out.println("--------"+userName+"----------");
-
- <span style="white-space: pre;"> </span>}
- }
对于sendRedirect的乱码问题是这样解决的:
- String infos = URLEncoder.encode("请重新登录","utf-8");
- resp.sendRedirect("login?info="+infos);
先用URLEncoder去编码,并且指定编码的编码表如UTF-8
当第二页面接收到数据的时候就会自动的URLDecoder得到我们的字节流数据,然后tomcat又根据自己的对get的方法的ISO-8895-1去解码,所以产生了乱码,
这个时候我们就要重新以ISO-8859-1去解码,获得之前的字节数组,然后再进行正确的UTF-8编码则得到正确的结果。
- String info = req.getParameter("info");
- String erro= new String(info.getBytes("ISO-8859-1"), "UTF-8");
至于post类型的方法处理乱码很简单.........
分享到:
相关推荐
### Java中文乱码问题详解 #### 一、中文问题的来源与背景 计算机技术发展初期,操作系统主要支持单字节的ASCII字符集。随着全球化进程加快和技术进步,为支持多种语言,尤其是双字节编码的语言(如中文),提出了...
jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...
总结,解决JSP中文乱码问题的关键在于理解不同环节的编码规则,并确保它们之间的一致性。从HTML页面编码、JSP文件编码、URL参数处理到服务器端接收参数的编码,每个环节都需要细心检查和设置。遇到问题时,首先要...
### MySQL中文乱码解决方案详析 #### 背景与挑战 在使用MySQL数据库的过程中,中文乱码问题一直是困扰很多开发者的难题。特别是在不同的服务器环境、数据库版本间迁移时,这种问题尤为突出。本文将详细介绍几种...
总结来说,解决Linux下中文文件名乱码问题的关键在于: 1. 确保Linux系统支持中文编码,如GBK和UTF-8。 2. 在处理文件名时进行适当的编码转换,特别是在跨平台操作时。 3. 如果在编程中处理文件名,可能需要编写或...
【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...
### Java乱码问题详解与解决方案 #### 一、问题背景 在Java开发过程中,尤其是在处理中文字符时,经常遇到字符编码不一致导致的乱码问题。由于Java默认使用Unicode编码,而在中国大陆地区,常见的字符集为GB2312...
### PLSQL中文乱码问题解决方案 #### 背景与问题描述 在处理数据库操作时,经常遇到的一个问题是中文字符的显示出现乱码的情况。这种情况不仅会影响数据的正确读取,还会导致用户界面的不友好体验。对于使用PL/SQL...
### Ubuntu11.10文本乱码问题解决:详尽指南 #### 背景与问题阐述 在使用Ubuntu 11.10系统时,不少用户遇到一个令人头疼的问题——文本文件出现乱码。这一现象主要表现为打开本地或网络上的文本文件(如.txt格式)...
mysql解压版详细配置说明,及解决中文乱码问题 含更改root初始密码方式。
### MySQL 插入中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在使用 MySQL 数据库处理中文数据时,经常会遇到一个让人头疼的问题——中文乱码。中文乱码不仅影响用户体验,还可能导致数据丢失或者错误...
通过上述步骤,我们可以有效地解决ADB中文乱码问题。关键在于理解不同环境下的字符编码差异,并采取合适的措施进行调整。对于开发者而言,保持对各种编码格式的基本了解是非常重要的,这有助于快速诊断并解决类似的...
4. 使用支持中文乱码解决方案的`SmartUpload`库。 通过以上步骤,可以有效地避免在使用`SmartUpload`进行文件上传时出现中文乱码的问题,确保数据的完整性和正确性。在实际开发中,对字符编码的理解和正确使用是...
### MySQL中文乱码问题解析与解决方案 #### 一、乱码原因分析 在MySQL数据库中遇到中文乱码问题,通常可以归结为以下几个方面: 1. **Server本身的设定问题**:比如服务器使用的字符集仍停留在老旧的`latin1`而非...
### 设置乱码问题详解 #### 一、理解乱码问题 在进行数据库操作时,可能会遇到数据呈现为不可读字符的现象,这种情况通常被称为“乱码”。出现乱码的原因多种多样,比如字符集设置不一致、编码转换错误等。解决...
本文将详细介绍如何解决macOS系统下MySQL中文乱码的问题,通过修改配置文件my.cnf来调整MySQL的字符集,确保中文能够正常显示。 ### 解决方案详解 #### 步骤一:定位my.cnf配置文件 首先,需要找到或创建MySQL的...
### Java解决GET请求中文乱码问题详解 在Java Web开发中,经常遇到的一个问题是处理GET请求中的中文参数时出现乱码。这个问题主要是因为浏览器发送GET请求时,参数默认使用ISO-8859-1编码格式,而服务器端通常采用...
### Linux乱码问题解决方案 #### 一、理解乱码产生的原因 在Linux环境中,乱码问题通常是由于不同操作系统之间的字符编码差异所导致的。Windows系统默认采用GBK编码(早期使用GB2312),而Linux则普遍使用UTF-8编码...
**JSP中文乱码问题详解** 在开发基于Java的Web应用程序时,JSP(Java Server Pages)页面常常会遇到中文乱码的问题。这通常发生在数据的输入、处理或输出阶段,给用户界面带来不便,也增加了开发者的调试难度。本文...