Java中文乱码的解决方案

时间:2024.4.30

Java中文乱码的解决方案

jsp+Servlet的形式,在jsp页面向后台发送的请求里包含中文时,后台采用

String name = request.getParameter("name")接收到的是乱码,我在网上找了很多资料,有网友说request.getParameter是默认采用ISO8859-1来编码的,必须进行转换:

我总结了一下,解决中文乱码大概有以下几种方式:

1、采用decode()方法

java.net.URLDecoder.decode(s)

2、采用设置字符集的方式

request.setCharacterEncoding("utf-8");

3、在页面上定义charset的字符集

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

4、在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8

<filter>

<filter-name>encodingFilter</filter-name>

<filter-class>com.demo.filter.CoreFilter</filter-class>

<init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param>

</filter>

<filter-mapping>

<filter-name>encodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

5、在form表单里定义编码

accept-charset="utf-8" onsubmit="document.charset='utf-8';"

6、更改ContentTypes的值

改变myeclipse里ContentTypes的值为utf-8

7、改变tomcat字符集

通过改变server.xml文件里的字符集来接收中文

8、采用转码的方式

nameCode = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");

补充:如果是Servlet向页面发送的数据中包含中文,可以采用如下方式解决: response.setContentType("text/html;charset=utf-8");


第二篇:Java编程中中文乱码问题的研究及解决方案


Java编程中中文乱码问题的研究及解决方案

0 引言

Java最大的特性是与平台的无关性及开发环境的多样性。字符串被Java应用程序转化之前,是根据操作系统默认的编码方式编码。Java语言内部采用Unicode编码,它是定长双字节编码,即任何符号都用两个字节表示。在Java程序运行时,就有一个从Unicode编码到对应操作系统及浏览器支持的编码格式转换问题,若此过程有一步不对就会出现中文乱码的问题。

1 Java Web开发中文乱码问题及解决方法

出现乱码三种主要情况是:页面显示乱码、用户提交的数据是乱码、数据库中的数据是乱码。下面就这三种情况讨论其解决的方案,其支持的环境是J2EE5.0,服务器为Tomcat5.5.16,数据库为MYSQL5.0。

1.1 页面显示乱码

页面上显示乱码的现象是:当访问某个JSP或者Servlet产生的页面的时候,页面上本来应该显示中文信息的地方变成乱码。

这时首先要分析乱码的来源。乱码的来源可能有两种情况,一种是浏览器显示不正确,另一种情况是后台在动态生成页面的时候,其内容就是乱码。所以,首先要做的是查看页面的源文件,看看里面的中文到底是不是乱码。如果不是乱码,那么说明是浏览器没有正确地解析页面的编码,否则是由于后台处理造成的。

对于第一种情况,只需要设置JSP或者Servlet的contentType属性即可。对于JSP中的设置使用的是page指令,将其代码设置为:

对于Servlet生成的页面,需要在输出页面之前调用response的setContentType()方法。其代码形式如下:

response.setContentType("text/html;charset=gb2312");

另外,在所生成的HTML文件的头部最好加入下面的内容:

若页面本身的内容就是乱码这种情况,一般只出现在动态生成内容的那一部分。要通过源代码进一步地查找乱码产生的根源。这时数据的来源也有两种情况,一种是从数据库中取出来的数据,另一种是接收的来自页面提交的数据。下面分别进行分析和处理。

1.2 用户提交的数据是乱码

这种情况的表现是通过request(用户请求)对象取得用户提交的中文信息后,输出到控制台后是乱码。这种情况的原因在于request对浏览器提交的数据的解码方式不正确。可以单独采用request的setCharacterEnco

ding()方法进行处理,但如果页面众多,每个都进行处理会很麻烦。这里,可以通过Filter(过滤器)将所有的request的编码都进行设置。

下列程序代码就是用来设置request编码的Filter。

public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)

throwsIOException,ServletException

{

// 判断是否需要进行编码的设置

if(!ignore||(request.getCharacterEncoding()==null))

{

// 得到配置文件中的编码类型

String encoding=selectEncoding(request);

if(encoding!=null)

request.setCharacterEncoding(encoding);

}

chain.doFilter(request,response);

}

1.3 数据库中的数据是乱码

这种情况多发生在向数据库写入数据的时候,偶尔也有可能出现数据库中的内容是正确的(通过数据库本身的工具可以正确地读取数据),但查询出来的结果是乱码。这种情况下,首先要检查执行的SQL语句是否正确,也就是将SQL语句输出到控制台后看其所包含的中文字符是否为乱码。如果是,需要找到其根源。否则应该是数据库自身的设置问题。

由于这类问题,没有一个通用的解决方法,在这里就以MySQI 5.0为例,解决中文乱码问题采取的方法进行介绍。

1)修改MySQL的配置文件。打开\my.init文件,把[mysqld]区的语句default-character-set=latinl修改为default-charact

er-set=gbk,在[client]区增加default-character-Set=gbk。修改后,数据库默认支持的编码格式就被改成了gbk编码。

2)在向表中插人中文时,先把中文字符编码转换为latin1编码,然后再插人表中,可通过下面代码实现:

String str= new String("大家好! ".GetBytes("gb2312"),"ISO88

59-1");

String sql="INSERT INTO Test VALUES(" +str+",";Stmt.execut

EUpdate(sq1);

在从数据库中读取数据时,再将latinl编码的字符转换为汉字字符,可通过下面代码实现:

String X=new String((r8.getString("title")).getBytes("ISO8859

-1"),"gb2312");

2 结束语

为了避免Java Web应用程序开发过程中出现乱码,首先要清楚乱码出现的根源在哪,按照在显示用户界面、接收用户数据、保存到数据库、从数据库读取数据和将数据库中的数据显示给用户的顺序,逐步地查找,然后再采取相应的对策。本文所讨论的几种解决方案,基本解决了各种情况下的中文乱码问题。

更多相关推荐:
Java 中文乱码转码问题总结

Java中文乱码转码问题总结20xx0505170408分类java字号订阅在JSPServlet中主要有以下几个地方可以设置编码pageEncodingquotUTF8quotcontentTypequott...

对JavaJSP中文乱码问题解决心得

自从接触Java和JSP以来就不断与Java的中文乱码问题打交道现在终于得到了彻底的解决现将我们的解决心得与大家共享一Java中文问题的由来Java的内核和class文件是基于unicode的这使Java程序具...

java中处理乱码问题个人总结

个人总结java中处理乱码问题个人总结java乱码的问题的可谓是老生常谈了自从接触java以来就不断地与中文乱码的问题打交道最近的参与的报表工具开发中遇到的乱码问题更是让人头疼随着项目工作的进度自己总结了一下处...

JavaJSP中文乱码问题解决心得

JavaJSP中文乱码问题解决心得自从接触Java和JSP以来就不断与Java的中文乱码问题打交道现在终于得到了彻底的解决现将我们的解决心得与大家共享一Java中文问题的由来Java的内核和class文件是基于...

java中文乱码问题

Javaweb编程中经常遇到汉字的问题现在总结一下工程的编码模式是utf8我遇到的最多的问题就是通过由前台向后台传值解决方法就行后台接受的时候requestsetCharacterEncodingquotUTF...

Java中文乱码的解决方案

Java中文乱码的解决方案jspServlet的形式在jsp页面向后台发送的请求里包含中文时后台采用StringnamerequestgetParameterquotnamequot接收到的是乱码我在网上找了很...

java中文乱码问题解决方案

Java中文问题一直困扰着很多初学者如果了解了Java系统的中文问题原理我们就可以对中文问题能够采取根本的解决之道最古老的解决方案是使用String的字节码转换这种方案问题是不方便我们需要破坏对象封装性进行字节...

Java读取TXT文本文件乱码解决方案

Java读取TXT文本文件乱码解决方案今天在解析一个文本文件的时候出现了乱码以前从未遇到花了点时间解决了在此总结一下首先先看一下解析的代码privateStringgetProjectDataFilefileS...

java io流的认识

大多初学者对javaIO系统提供了如此多的类而感到不知所错本文中将会做一下梳理流的概念流stream的概念源于UNIX中的管道pipe的概念在UNIX中管道是一条不间断的字节流用来实现程序或进程间的通信或读写外...

java基础知识总结(经典中的经典)

Java基础知识总结写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4代码实现用具体的java语言代码把思路体现出来学习新技术的四点1该技术是什么2该技术有什么...

java.io包中的流

Javaio包中的流流是一个很形象的概念当程序需要读取数据的时候就会开启一个通向数据源的流这个数据源可以是文件内存或是网络连接类似的当程序需要写入数据的时候就会开启一个通向目的地的流这时候你就可以想象数据好像在...

毕向东java基础总结(完整版)

克己宽容仁德博学厚黑坚毅稳重Java基础知识总结168克己宽容仁德博学厚黑坚毅稳重Java基础知识总结超级经典写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4...

java中文乱码解决总结(14篇)