- 浏览: 48246 次
- 性别:
- 来自: 广州
文章分类
最新评论
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()
方法得到的字符串name
的Unicode
值是以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
编码,然后传递到数据库中,加上数据库本身也
有字符集,这就是为什么我们常常在数据库中读取中文数据时,读到的是乱码。
要解决上述问题,只需要将数据库默认的编码格式改为GBK
或GB2312
并且 在连接数据库用的URL 后加入(以连接mysql 为例):useUnicode=true;characterEncoding=utf-8 如: url="jdbc:mysql:///db1?useUnicode=true&characterEncoding=utf-8" ,
即可,不同的数据库还提供了另外的方式来处理字符编码转换的问题,读者在实际应用过程中,可针对具体情况再做具体处理,只要理解了编码转换的过程,就能找到问题的所在,进而解决问题。
4
.Servlet/JSP
在不同语言系统的平台下运行
有时候,我们在中文系统平台下开发的Web
应用程序移植到英文系统平台下,在Servlet
和JSP
中直接书写的中文字符串在输出时,将显示为乱码。这是 因为在编译Servlet
类或者JSP
文件时,如果没有使用-encoding
参数指定Java
源程序的编码格式,javac
会获取本地操作系统默认采用 的字符集,以该字符集将Java
源程序转换为Unicode
编码保存到内存中,然后将源程序编译为字节码文件(字节码文件采用的是UTF-8
编码),保存
到硬盘上。
在英文平台下,采用的默认编码格式是ISO-8859-1
,所以在编译转换后,执行输出时,原先在源文件中书写的中文字符串就变成了乱码。
要解决这个问题,在编译Servlet
类的源程序时,可以用-encoding
参数指定编码为GBK
或GB2312
,例如:
javac
–encoding GBK HelloServlet.java
对于JSP
页面,只要在page
指令中用contentType
属性或pageEncoding
属性指定编码格式为GBK
或GB2312
,Web
容器就可以正确转换和编译JSP
文件了。例如:
<%@ page contentType="text/html; charset=GBK" %>
或
<%@ page pageEncoding="GBK" %>
在实际的Web
应用中,乱码问题产生的原因多种多样,然而只要我们理解了字符编码的转换过程,仔细地分析乱码产生的原因,找到问题的关键,就能对症下药,解决问题。
发表评论
-
java web项目配置tomcat连接池
2011-09-20 23:33 1779本文包含两部分内容。第一部分是在eclipse下配置项目 ... -
在swing开发中获取系统已安装的lookAndfeel类的方法
2011-09-13 23:20 965public Voctor<LookAndFeel &g ... -
javaweb中的请求--响应流程(get方式提交请求)
2011-09-11 22:30 1057javaweb中的请求--响应流程(get方式提交请求) -
commons-dbutils使用简单范例--简化jdbc编程
2011-09-11 10:16 794commons-dbutils使用范例--简化jdbc编程 -
session编程(包括禁用cookie的情况)
2011-09-11 10:00 678session编程 -
cookie编程
2011-09-11 10:00 683cookie编程 -
JSP入门需要知道的五个方面
2011-09-10 21:16 817本文是一个JSP入门的简单的总结性文章,从Servlet知 ... -
Form表单提交数据编码方式和tomcat接受数据解码方式的思考
2011-09-10 21:11 544form有2中方法把数据提 ... -
execute、executeQuery和executeUpdate之间的区别
2011-09-10 21:09 697JDBCTM中Statement接口提 ... -
使用eclipse开发J2EE应用
2011-09-10 21:08 783使用eclipse开发J2EE应用 -
web.xml文件在web项目中的作用及基本配置
2011-09-10 21:03 1906web 工程中的 web.xml 文件有什 ... -
JSP入门之避免Form表单重复提交的几种方案
2011-09-10 20:59 1105对于JSP 入门的初级的学习者表单的提交是一个非常困扰 ... -
java_MD5加密源码
2011-09-10 20:53 738package com.lt.util; import ... -
jsp实现网页计数器(防刷新计数和防刷新单用户计数)
2011-09-10 20:51 1301jsp实现网页计数器(防刷新计数和防刷新单用户计数) -
jsp分页实现
2011-09-10 20:47 613jsp分页实现 -
多图详解教程:Eclipse3.6连接Tomcat7
2011-09-10 20:44 718多图详解教程:Eclipse3.6连接Tomcat7(见附件) ... -
程序实现数据库事务控制
2011-09-09 18:00 725当两个或多个事务在修改同一条记录时,有两种方法保证数据的完整性 ... -
jdbc编程
2011-09-09 17:03 585jdbc编程 -
url 重写来实现会话管理
2011-09-08 21:45 939如果浏览器不支持 cookies,或将浏览器设置为不接受 co ... -
jsp环境下session的创建
2011-09-08 20:54 8161)-不恰当的request.getSessi ...
相关推荐
JAVA 中文乱码解决问题 JAVA 中文乱码问题是开发过程中常见的问题之一,解决这个问题需要了解乱码产生的原因,然后对症下药。下面我们对容易产生乱码问题的场景进行分析,并提出解决方案。 1. 以 POST 方法提交的...
总之,解决Java中的URL中文乱码问题需要理解URL编码的原理,并在客户端和服务器端采取相应的措施,确保编码和解码的一致性。无论是通过JavaScript编码、Java服务器端解码,还是调整服务器配置,关键在于确保字符集的...
本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中的乱码: 当Java程序读取或写入包含中文字符的文件时,需要设置正确的字符编码。例如,使用`...
### Java中文乱码的解决方法 #### 方法一:与Spring集成解决中文乱码问题 针对与Spring框架集成的应用,可以通过在`web.xml`文件中进行相应的配置来解决中文乱码问题。具体步骤如下: 1. **修改Web配置文件**: ...
在Java服务器端,使用`ServerSocket`的`accept`方法创建`Socket`,并使用`DataInputStream`来读取客户端发送的数据。由于C++可能使用GBK编码,因此在读取数据后,需要将接收到的字节数组转换为`String`时指定GBK编码...
Java 乱码问题是 Java 开发中常见的问题之一,解决这个问题需要了解 Java 的编码方式、JSP 中文乱码问题、Tomcat 5.5 中文乱码问题、JDBC ODBC Bridge 的 Bug 及其解决方法、Solaris 下 Servlet 编程的中文问题及...
Java 中文乱码问题的解决方法 1. 使用 UTF-8 编码 在 Java 中,默认的编码方式是 UNICODE,所以用中文也易出问题。常见的解决方法是使用 UTF-8 编码。例如,在 JSP 中,可以加入以下代码: `<%@ page language="...
本文将深入分析Java中文乱码问题的根本原因,介绍各种编码格式的区别和应用场景,并提供解决乱码问题的方法和经验。 在Java中,常见的编码格式有: * ASCII码:总共有128个,用一个字节的低7位表示,0~31是控制...
阅读许多关于中文乱码的解决办法的博文后,发现对于该问题我们都(更加包括我自己)没有一个清晰明了的认识,于是LZ想通过这系列博文(估计只有几篇)来彻底分析、解决java中文乱码问题,如有错误之处望各位同仁指出...
### Java中文乱码解决方案与经验 #### 一、字节与Unicode 在Java中处理文本时,经常会遇到中文乱码的问题。这是因为Java内部使用的是Unicode编码标准,而外部数据源如文件、网络传输等通常使用的是字节流,且可能...
本文深入剖析了Java中文问题的根源,并提供了相应的解决方案。 一、问题的由来 早期的计算机系统主要支持单字节编码的英文字符,但随着多语言需求的增加,Unicode编码应运而生,它能兼容英文和其他多字节字符,如...
开发中前台页面向后台传参,汉字乱码,看了好多网上的方法都解决不了,所以写了一个工具类,判断是乱码就转换,不乱码就不乱换,汉字字母符号自动判断。最后完美解决汉字乱码问题。
综上所述,解决Java中文乱码问题的关键在于确保整个程序的编码一致性,包括源代码、编译器、运行环境、文件读写、网络传输以及数据库操作等环节。通过细心配置和适当地指定编码,我们可以有效地避免乱码问题,确保...
针对上述问题,可以采取以下方法来解决Java中文乱码问题: 1. 统一编码格式:在Java程序中统一使用一种编码格式,比如UTF-8,可以在程序的最开始就设置JVM的默认编码格式为UTF-8,确保Java内部编码和外部编码一致性...
本文将详细介绍如何解决JAVA反编译文件时的中文乱码问题。 首先,理解问题的根源:Java源代码默认采用UTF-8编码,但某些情况下,源代码可能使用了其他编码方式,如GBK。当这些源代码被编译成字节码后,再用不支持...
针对上述原因,我们可以采取以下措施来解决Java中文乱码问题: 1. **统一编码格式**:确保开发环境中所有相关的编码设置都使用统一的标准,如UTF-8。这包括文件保存时的编码、编译器的编码设置以及JVM的默认字符集...