原文链接:http://blog.csdn.net/rocgege/archive/2009/04/29/4136976.aspx
Java
是目前最流行的面向对象的变成语言之一,
Java
支
UTF
-
8
,
ISO
-
8859
-
1
、
GBK
等各种字体编码,可笔者发现
Java
中字体编码的问
题仍困倒了不少程序员,网上虽然也有不少关于再
Java
中如何正确显示中文的文章,但都不够全面,笔者特意总结如下》
影响
Java
中字体编码正确显示的有几个因素:
1
)数据库的链接方式;
2)
网页中使用的字体编码;
3
)数据库里存放数据的字体编码;
4
)
Java
的缺省字体编码。入股哦在变成中遇到不能正确显示中文是,要先弄清楚以上几项所使用的字体编码,再分析找出原因,即可解决问题。
众所周知,
JSP
是
Java
的一种,和网页有关,而网页也有自己的中文编码系统,所以
JSP
处理中文要比纯
Java
的类文件更为麻烦。本文的测试数据库害死
MySQL3.2
,数据库链接驱动是用
org.gjt.mm.mysql.Driver,
这里主要讨论
UTF
-
8
和
GBk
的显示(
GB2312
是
GBK
的一个子集,
Java
众可以使用
GBK
来代替
GB
系列)。我们先来研究
JSP
中字体编码问题,下面第一到第六点是针对
JSP
的(因为从数据库里读出中文数据与写入中文数据有所区别,咱们分别说明,前三点是从读取数据库到显示页面,后三点是从网页输入数据到存入数据库),第七到第九点针对纯
Java
的类文件。一下
rs
标识
ResultSet
的一个视力,是执行
Select
语句之后产生的数据集。
一、数据库链接方式使用
UTF
-
8
在连接数据库的驱动后面加上这句参数
useUnicode=true&characterEncoding=UTF-8,
例如
jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
,从数据库里读出中文显示在使用
GBk
的
JSP
的网页里,如果数据库存放的字体编码是
UTF
-
8
,在
JSP
中使用
str=new String(rs.getBytes(1),”UTF-8”)
或者
str=rs.getString(1),
可以正确显示中文,如果数据库里存放的是
GBk
数据,那么
JSP
中也要使用
str-new String(rs.getBytes(1),”GBK”)
来显示正确的中文。值得注意的是如果页面使用
UTF
-
8
,数据库存放的是
UTF
-
8
,也可以用
str=new String(rs.getBytes(1),”GBK”)
正确显示中文。如果页面是
UTF
-
8
,而数据库里存放的是
GBK
,无法直接显示中文,需要
2
步转换,
str=new String(rs.getBytes(1),”GBK”),
在
str=new String(str.getBytes(“UTF-8”),”GBK”)
,
才可以正确显示中文。
二、数据库连接方式使用
GBK
在连接数据库的驱动后面加上这句参数
useUnicode=true&characterEncoding=GBK
,例如
jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&characterEncoding=GBK,
从数据库里读出中文,显示在使用
GBK
的
JSP
的网页里,如果数据库里存放的字体编码是
UTF
-
8
,在
JSP
中一定要使用
str=new String(rs.getBytes(1),”UTF-8”)
,才正确显示中文。如果数据库里存放的是
GBK
数据,那么
JSP
中也要使用
str=new String(rs.getBytes(1),”GBK”)
或者直接使用
str=rs.getString(1),
即可显示正确的中文。如果页面是
UTF
-
8
,而数据库里存放的是
GBK
,只能用
str=new String(rs.getString(1).getBytes(“UTF-8”),”GBK”)
的方法来显示中文;如果网页是
UTF
-
8
,而数据库里存放的是
UTF
-
8
,可用
str=new String(rs.getBytes(1),”GBK”)
或者
rs.getString(1)
方法来显示中文。
三、使用缺省数据库连接方式
连接数据库的驱动后面没有蛰居参数
useUnicoding=&characterEncoding=,
例如
jdbc:mysql://localhost/DBVF?autoReconnect=true
,没有参数
useUnicoding=&characterEncoding,
标识使用默认的
ISO
-
8859
-
1
编码。
1、
从数据库里读出中文,显示在
GBK
的网页里。如果数据库里存放的字体编码是
UTF
-
8
,在
JSP
网页中一定要使用语句
str=new String(rs.getString(1),”UTF-8”)
或者
str=new String(rs.getString(1).getBytes(“ISO-8859-1”),”UTF-8”),
才可以正确显示中文。如果数据库里存放的是
GBK
数据,那么
JSP
中也要使用
str=new String(rs.getBytes(1),”GBK”)
或
str=new String(rs.getString(1).getBytes(“ISO-8859-1”),”GBK”)
显示正确的中文。
2、
如果网页是
UTF
-
8
,不能直接正确显示
GBK
,需要
2
步骤,
str=new String(rs.getBytes(1),”GBK”),
在
str=new String(str.getBytes(“UTF-8”),”GBK”)
,才可以正确显示中文。如果数据库里存的是
UTF
-
8
,直接用
str=new String(rs.getBytes(1),”GBK”)
或者
str=new String(rs.getString(1).getBytes(“ISO-8859-1”,”GBK”)
就可以显示中文了。
以上是读取数据库里中文正确显示在网页上,下面三点是如何正确存入数据库。
四、数据库连接方式很使用
UTF
-
8
编码
JSP
中要把网页输入的中文存入数据库,通畅有一个提交的过程,是用
str=request.getParameter(“username”),
然后执行
update
或者
insert
语句来存入数据库。如何赋值给
str
很重要,而且这里中文输入与网页使用的字体编码有关。
1、
网页使用
UTF
-
8
,使用
str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”)
或者
str=new String(request.getParameter(“username”).getBytes(),”UTF-8”)
,都可以是的存到数据库中的数据是
UTF08
编码。
2、
Ww
网页使用
GBK
,使用
str=new String(request.getParameter(“username”).getBytes(),”GBK”),
那么存入数据库的是
UTF
-
8
编码。
3、
值得注意的是使用
UTF
-
8
的数据库连接方式不能存的
GBK
。
五、数据库连接方式使用
GBK
编码
1
、如数使用
GBK
网页,存到数据库里的是
GBK
的方法:
str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”GBK”),
或者
str=new String(request.getParameter(“username”).getBytes(),”GBK”)
。
2
、网页使用
GBK
,想存入
UTF
-
8
到数据库里,要分
2
步:先
str=new String(request.getParameter(“username”).getBytes(),”GBK”),
再
str=new String(str.getBytes(“UTF-8”,”GBK”)
即可。
3
、网页使用
UTF-8
,而且使用
str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”GBK”)
或者
str=new String(request.getParameter(“username”).getBytes(),”UTF-8”),
那么存入到数据库里的数据是
UTF
-
8
编码。
4
、网页使用
UTF
-
8
,而且使用
str=new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”) ,
那么存入数据库的数据是
GBK
编码。
六、数据库连接方式使用缺省,即不使用参数
useUnicode
和
characterEncoding
1
、网页使用
GBK
,如果使用
str=request.getParameter(“username”)
或者
str=new String(request.getParameter(“username”).getBytes()),
那么在数据库里的数据是
GBK
编码。网页使用
UTF
-
8
和使用
str=request.getParameter(“username”),
则存入数据库是
UTF
-
8
编码。
2
、如果使用
str=new String(request.getParameter(“username”).getBytes(“ISO-8850-1”)),
那么根据网页提供的字体编码而存到数据库,比如是
UTF
-
8
的网页,那么存到数据库中的就是
UTF
-
8
编码,如果使用
GBK
网页,那么存到数据库里的字就是
GBK
编码。
3
、如果使用
str=new String(request.getParameter(“username”).getBytes(“UTF-8”)
,“
UTF-8”)
这一种组合能存到正确的数据外,其他存在数据库里的数据则都是乱码或者错误马。在这个
UTF
-
8
组合的特例中,网页使用的是
GBK
,则存入数据库里就是
GBK
,网页使用
UTF
-
8
,那么存到数据库的就是
UTF
-
8
编码。
4
、网页是
GBK
的要存得
UTF
-
8
,一定需要
2
步:
company=new String(request.getParameter(“company”).getBytes(),”GBK”)
和
company= new String(company.getBytes(“UTF-8”))
。
5
、网页是
UTF
-
8
得,不能存的
GBK
在数据库里,一句话,改变数据库连接方式不能存得
GBK
码。
以上所有得都是基于
JSP
网页和数据库交换数据,下面讨论一下纯
JAVA
编程下得字体编码转换。
七、数据库连接方式使用
UTF
-
8
编码
1
、数据库里得中文是
UTF
-
8
,可以转换位
GBK
,但不能把
GBK
存入数据库。
2
、数据库是
GBK
,如果转换
UTF
-
8
,使用
content=new String(rs.getBytes(2),”GBK”)
直接将
content
存入数据库就可为
UTF
-
8
编码。
八、数据库连接方式使用
GBK
编码
1
、数据库里得中文是
UTF
-
8
,如果转换为
GBK
,使用
content=new String(rs.getString(2).getBytes(),”GBK”)
或者
content=new String(rs.getString(2).getBytes())
,再存入数据库即存得
UTF
-
8
编码。
2
、数据库里得中文是
GBK
,如果转换为
UTF
-
8
,使用
content=new String(rs.getString(2).getBytes(“UTF-8”))
或者
content=new String(rs.getString(2).getBytes(“UTF-8”),”GBK”),
再直接使用
update
或
insert
语句插入到数据库,即存得
UTF
-
8
。
3
、如果某个
String
是
GBK
,要转化为
UTF
-
8
,也是使用
content=new String(GBKstr.getBytes(“UTF-8”))
或者
content=new String(GBKstr.getBytes(“UTF-8”),”GBK”);
如果某个
String
是
UTF
-
8
,要转换为
GBK
,应该使用
new String(UTFstr.getBytes(“GBK”),”UTF-8”)
。
九、数据库连接使用缺省,即不使用参数
1
、
str2=new String(GBKstr.getBytes(“UTF-8”),”ISO-8859-1”),
可以将数据库里得
GBK
编码转换为
UTF
-
8
。
2
、读取
UTF
-
8
然后存入
UTF
-
8
,则用
str1=new String(UTFstr.getBytes(),”ISO-8859-1”)
或者
str1=new String(UTFstr.getBytes(“GBK”),”ISO-8859-1”)
。
3
、不能实现数据库里得
UTF
-
8
转换为
GBK
。
分享到:
相关推荐
本文将详细介绍如何在Java环境中正确地使用各种字符编码,包括UTF-8、ISO-8859-1、GBK等。 #### 一、字符编码简介 1. **UTF-8**:是一种可变长度的字符编码,用于Unicode标准,支持世界上几乎所有国家的文字。它是...
Java中的字符编码转换是编程实践中一个至关重要的概念,尤其是在处理多语言环境和跨平台交互时...理解Java中的字符编码转换机制对于编写能够正确处理多语言文本的程序至关重要,尤其在需要处理跨平台文件交互的场景下。
这两个类位于`java.net`包下,可以帮助开发者进行字符串编码和解码,确保数据在网络传输过程中的正确性。 `URLEncoder`类提供了`encode`静态方法,用于将普通字符串编码成`application/x-www-form-urlencoded` MIME...
在Java中,每个字符串都有一个默认的字符编码,通常是平台相关的(例如,Windows系统通常默认使用GBK,而Linux系统则可能是UTF-8)。 Java提供了`java.nio.charset`包来处理字符编码。其中,`Charset`类是核心,它...
Java中默认使用的是Unicode编码,但在处理外部数据时,如读取文本文件、接收HTTP请求或连接数据库时,如果没有正确设置编码,就可能导致乱码问题。例如,当读取GBK编码的文本文件,而使用UTF-8解码时,会出现乱码。 ...
### Java中的字符集编码入门(五):Java代码中的字符编码转换Part1 #### 核心知识点概述: 本文档深入探讨了Java编程语言中字符集编码的基础知识,并着重讲解了字符编码转换的基本原理及其在Java代码中的应用。...
在 JAVA 中,中文字符编码问题一直是让人头疼的问题,特别是在 WEB 应用中。网上的分析文章和解决方案都很多,但总是针对某些特定情况的。本文将详细解释 JAVA 中文字符编码问题的根源,并提供解决方案。 一、JAVA ...
通过以上的介绍,我们可以了解到 Java 中字符串和字符编码的处理是非常重要的,特别是在跨平台和多语言环境中。正确的字符编码管理不仅可以避免乱码问题,还能提高程序的健壮性和可维护性。希望本文能帮助开发者们更...
本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,探讨在实际开发中如何运用和处理字符编码问题。 首先,我们需要理解字符集的概念。字符集是一系列符号的集合,例如...
在Java中,字符编码可以使用getBytes()方法将字符串转化为字节数组,并使用new String()方法将字节数组转化为字符串。但是,这些方法默认使用系统的默认字符编码方式,这可能会导致乱码问题。要解决这个问题,可以...
UTF-8(Unicode Transformation Format-8)是一种可变长度的字符编码格式,主要用于在网络中快速传输Unicode字符。UTF-8的基本原理是根据Unicode字符的范围,将其映射成不同长度的编码,具体规则如下: - 每个英文...
Java中的字符编码转换是编程实践中不可或缺的一部分,尤其是在处理多语言和跨平台的场景下。Java选择了UTF-16作为其内部字符表示的标准,这确保了在JVM内存中,所有字符都以统一的方式存储,避免了编码不一致带来的...
Unicode编码解决了多语言环境中字符编码不统一的问题,使得各种语言的字符可以在同一环境中被正确处理。在Java中,字符串是以Unicode编码存储的,这意味着它可以无缝地处理各种语言的文本。 四、UTF UTF(Unicode ...
通过对ISO 8859-1、GB2312/GBK、Unicode和UTF等常见编码的理解,以及Java提供的字符串操作方法(如`getBytes`和`new String`),开发者可以有效地解决实际项目中的字符编码问题,确保应用程序能够正确地处理各种文本...
1. **统一编码**:尽可能在整个项目中使用统一的编码格式,推荐使用UTF-8。 2. **明确指定编码**:在文件读写、网络传输等场合明确指定编码格式。 3. **检查配置**:检查服务器、数据库等相关组件的字符集设置是否...
在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web环境中的应用。 #### 二、Java中的字符串与字符编码 在Java中,`...
总的来说,Java中判断文件编码格式的方法包括简单的字节匹配和使用更复杂的库如cpdetector。在实际开发中,应根据项目的具体需求选择合适的方法,确保能正确处理各种编码格式的文件,避免因为编码问题导致的乱码现象...