`

java中文乱码解决方法

 
阅读更多

 

1 .以POST 方法提交的表单数据中有中文字符
由于Web 容器默认的编码方式是ISO-8859-1 ,在Servlet/JSP 程序中,通过请求对象的getParameter() 方法得到的字符串是 以ISO-8859-1 转换而来,这是导致乱码产生的原因之一。为了避免容器以ISO-8859-1 的编码方式返回字符串,对于以POST 方法提交的表单 数据,可以在获取请求参数值之前,调用request.setCharacterEncoding"GBK" ),明确指定请求正文使用的字符编码方式是 GBK 。在向浏览器发送中文数据之前,调用response.setContentType"text/html;charset=GBK" ),指定输 出内容的编码方式是GBK
对于JSP 页面,在获取请求参数值之前,写上下面的代码:
<%request.setCharacterEncoding("GB2312");%>
为了指定输出内容的编码格式,设置page 指令contentType 属性,如下:
<%@ page contentType="text/html; charset=GBK" %>
Web 容器转换JSP 页面后的Servlet 类中,会自动添加下面的代码:
response.setContentType("text/html; charset=GBK");
2
.以GET 方法提交的表单数据中有中文字符
当提交表单采用GET 方法时,提交的数据作为查询字符串被附加到URL 的末端,发送到服务器,此时在服务器端调用setCharacterEncoding() 方法也就没有作用了。我们需要在得到请求参数的值后,自己做正确的编码转换。
String name = request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"GBK");
在第一行,调用getParameter() 方法得到的字符串nameUnicode 值是以ISO-8859-1 编码转换而来,调用 name.getBytes"ISO-8859-1" ),将得到原始的GBK 编码值,接着,对new String() 的调用将以GBK 字符集重新构造字符串的Unicode 编码。
为了方便从ISO-8859-1 编码到GBK 的转换,我们可以编写一个工具方法,如下:
public String toGBK(String str)
                 throws java.io.UnsupportedEncodingException
{
    return new String(str.getBytes("ISO-8859-1"),"GBK");
}
3
.在数据库中存储和读取中文数据
对于大多数数据库的JDBC 驱动程序,在Java 程序和数据库之间传递数据都是以ISO-8859-1 为默认编码格式,所以,我们在程序中向数据库存储包 含中文的数据时,JDBC 驱动程序首先把程序内部的Unicode 编码格式的数据转化为ISO-8859-1 编码,然后传递到数据库中,加上数据库本身也 有字符集,这就是为什么我们常常在数据库中读取中文数据时,读到的是乱码。
要解决上述问题,只需要将数据库默认的编码格式改为GBKGB2312

并且

在连接数据库用的URL

后加入(以连接mysql

为例):useUnicode=true;characterEncoding=utf-8

 如:  url="jdbc:mysql:///db1?useUnicode=true&characterEncoding=utf-8"

即可,不同的数据库还提供了另外的方式来处理字符编码转换的问题,读者在实际应用过程中,可针对具体情况再做具体处理,只要理解了编码转换的过程,就能找到问题的所在,进而解决问题。
4
Servlet/JSP 在不同语言系统的平台下运行
有时候,我们在中文系统平台下开发的Web 应用程序移植到英文系统平台下,在ServletJSP 中直接书写的中文字符串在输出时,将显示为乱码。这是 因为在编译Servlet 类或者JSP 文件时,如果没有使用-encoding 参数指定Java 源程序的编码格式,javac 会获取本地操作系统默认采用 的字符集,以该字符集将Java 源程序转换为Unicode 编码保存到内存中,然后将源程序编译为字节码文件(字节码文件采用的是UTF-8 编码),保存 到硬盘上。
在英文平台下,采用的默认编码格式是ISO-8859-1 ,所以在编译转换后,执行输出时,原先在源文件中书写的中文字符串就变成了乱码。
要解决这个问题,在编译Servlet 类的源程序时,可以用-encoding 参数指定编码为GBKGB2312 ,例如:
javac
encoding GBK HelloServlet.java
对于JSP 页面,只要在page 指令中用contentType 属性或pageEncoding 属性指定编码格式为GBKGB2312Web 容器就可以正确转换和编译JSP 文件了。例如:
<%@ page contentType="text/html; charset=GBK" %>

<%@ page pageEncoding="GBK" %>
在实际的Web 应用中,乱码问题产生的原因多种多样,然而只要我们理解了字符编码的转换过程,仔细地分析乱码产生的原因,找到问题的关键,就能对症下药,解决问题。

分享到:
评论

相关推荐

    java中文乱码解决问题

    JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...

    java中文乱码之解决URL中文乱码问题的方法

    总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...

    Java关于中文乱码问题的多种解决方法

    本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中的乱码: 当Java程序读取或写入包含中文字符的文件时,需要设置正确的字符编码。例如,使用`...

    java中文乱码的解决方法

    ### Java中文乱码的解决方法 #### 方法一:与Spring集成解决中文乱码问题 针对与Spring框架集成的应用,可以通过在`web.xml`文件中进行相应的配置来解决中文乱码问题。具体步骤如下: 1. **修改Web配置文件**: ...

    java c++ 通信之间的乱码解决方法

    在Java服务器端,使用`ServerSocket`的`accept`方法创建`Socket`,并使用`DataInputStream`来读取客户端发送的数据。由于C++可能使用GBK编码,因此在读取数据后,需要将接收到的字节数组转换为`String`时指定GBK编码...

    java乱码问题解决方法

    Java 乱码问题是 Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及...

    java解决中文乱码问题

    Java 中文乱码问题的解决方法 1. 使用 UTF-8 编码 在 Java 中,默认的编码方式是 UNICODE,所以用中文也易出问题。常见的解决方法是使用 UTF-8 编码。例如,在 JSP 中,可以加入以下代码: `&lt;%@ page language="...

    java中文乱码问题解决

    本文将深入分析Java中文乱码问题的根本原因,介绍各种编码格式的区别和应用场景,并提供解决乱码问题的方法和经验。 在Java中,常见的编码格式有: * ASCII码:总共有128个,用一个字节的低7位表示,0~31是控制...

    Java中文乱码解决之道

    阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...

    java中文乱码解决方案和经验

    ### Java中文乱码解决方案与经验 #### 一、字节与Unicode 在Java中处理文本时,经常会遇到中文乱码的问题。这是因为Java内部使用的是Unicode编码标准,而外部数据源如文件、网络传输等通常使用的是字节流,且可能...

    JAVA常见中文乱码问题解决方法

    本文深入剖析了Java中文问题的根源,并提供了相应的解决方案。 一、问题的由来 早期的计算机系统主要支持单字节编码的英文字符,但随着多语言需求的增加,Unicode编码应运而生,它能兼容英文和其他多字节字符,如...

    java汉字乱码终极解决代码

    开发中前台页面向后台传参,汉字乱码,看了好多网上的方法都解决不了,所以写了一个工具类,判断是乱码就转换,不乱码就不乱换,汉字字母符号自动判断。最后完美解决汉字乱码问题。

    Java中文乱码浅析及解决方案

    综上所述,解决Java中文乱码问题的关键在于确保整个程序的编码一致性,包括源代码、编译器、运行环境、文件读写、网络传输以及数据库操作等环节。通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保...

    java中文乱码大全

    针对上述问题,可以采取以下方法来解决Java中文乱码问题: 1. 统一编码格式:在Java程序中统一使用一种编码格式,比如UTF-8,可以在程序的最开始就设置JVM的默认编码格式为UTF-8,确保Java内部编码和外部编码一致性...

    JAVA反编译文件解决中文乱码

    本文将详细介绍如何解决JAVA反编译文件时的中文乱码问题。 首先,理解问题的根源:Java源代码默认采用UTF-8编码,但某些情况下,源代码可能使用了其他编码方式,如GBK。当这些源代码被编译成字节码后,再用不支持...

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

    针对上述原因,我们可以采取以下措施来解决Java中文乱码问题: 1. **统一编码格式**:确保开发环境中所有相关的编码设置都使用统一的标准,如UTF-8。这包括文件保存时的编码、编译器的编码设置以及JVM的默认字符集...

Global site tag (gtag.js) - Google Analytics