`
vipshichg
  • 浏览: 267542 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java编程中如何选择正确的字符编码

    博客分类:
  • java
阅读更多

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 。

10
21
分享到:
评论
2 楼 kai892008350 2013-10-12  
就那么点东西,写那么麻烦
1 楼 devilyard 2013-10-12  
这错别字啊

相关推荐

    JAVA 转换字符编码工具

    在Java编程语言中,字符编码是一个非常重要的概念,特别是在处理文本数据时。字符编码决定了如何将字符转换为字节序列,以及如何从字节序列恢复字符。本篇将围绕"JAVA 转换字符编码工具"这个主题,深入探讨字符编码...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.pdf

    Java中的字符编码转换是编程实践中一个至关重要的概念,尤其是在处理多语言环境和跨平台交互时。Java通过统一采用UTF-16编码格式在JVM内部处理字符,简化了字符操作的复杂性。UTF-16是一种变长的Unicode编码,它可以...

    JAVA_字符编码

    在Java编程语言中,字符编码是一个至关重要的概念,它涉及到如何表示、存储和处理文本数据。字符编码系统如ASCII、ISO-8859-1、Unicode(包括UTF-8、UTF-16等)被广泛使用。本教程将深入探讨Java中的字符编码,以及...

    java_字符编码 Javajava_字符编码问题

    ### Java 字符编码详解 #### 一、Java 字符编码基础概念 ...正确的字符编码管理不仅可以避免乱码问题,还能提高程序的健壮性和可维护性。希望本文能帮助开发者们更好地理解和处理 Java 中的字符编码问题。

    java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    在Java编程语言中,`URLDecoder`和`URLEncoder`是两个非常重要的工具类,主要用于处理URL中的中文字符和其他特殊字符。这两个类位于`java.net`包下,可以帮助开发者进行字符串编码和解码,确保数据在网络传输过程中...

    Java字符集和编码

    在探讨Java字符集和编码之前,我们先了解一下为什么在Java编程中需要关注字符集和编码。Java作为一种广泛应用的编程语言,其内部采用的是Unicode编码,这使得Java能够很好地支持全球化的应用开发。然而,在实际的...

    java字符串的各种编码转换

    根据提供的文件信息,本文将详细解释Java中字符串的不同编码转换方法及原理,并深入探讨每种...需要注意的是,在实际应用中,可能会遇到不支持的字符编码异常,这时需要捕获并妥善处理这些异常,确保程序的稳定运行。

    Java字符编码及获取文件编码

    在Java编程语言中,字符编码是一个至关重要的概念,它涉及到数据的存储、处理和传输。字符编码决定了如何将字符(如字母、数字、符号)转换为数字表示,以便计算机能够理解并操作它们。本篇文章将深入探讨Java中的...

    java字符集编码问题

    通过对ISO 8859-1、GB2312/GBK、Unicode和UTF等常见编码的理解,以及Java提供的字符串操作方法(如`getBytes`和`new String`),开发者可以有效地解决实际项目中的字符编码问题,确保应用程序能够正确地处理各种文本...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1.doc

    本文档深入探讨了Java编程语言中字符集编码的基础知识,并着重讲解了字符编码转换的基本原理及其在Java代码中的应用。文档强调了在Java虚拟机(JVM)内部字符统一采用UTF-16编码格式的重要性,并详细解释了如何实现...

    Java网络传输中字符编码问题的研究

    Java网络传输中的字符编码问题主要涉及到Java编程语言在处理不同编码格式时的转换和兼容性。Java语言本身采用Unicode字符集,这是一种国际化的标准,能够支持世界上大多数语言,包括中文。然而,在实际的网络环境中...

    java字符串编码转换

    在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web环境中的应用。 #### 二、Java中的字符串与字符编码 在Java中,`...

    JAVA及相关字符集编码问题

    Unicode编码解决了多语言环境中字符编码不统一的问题,使得各种语言的字符可以在同一环境中被正确处理。在Java中,字符串是以Unicode编码存储的,这意味着它可以无缝地处理各种语言的文本。 四、UTF UTF(Unicode ...

    深入分析 Java 中的中文编码问题

    在Java编程中,中文编码问题是一个常见的挑战,尤其是在处理文本输入、输出以及网络通信时。本文将深入探讨Java中的中文编码问题,以及如何有效地解决这些问题。 首先,我们要了解字符编码的基本概念。字符编码是...

    Java中的字符集编码入门(五)Java代码中的字符编码转换Part1[参考].pdf

    Java中的字符编码转换是编程实践中不可或缺的一部分,尤其是在处理多语言和跨平台的场景下。Java选择了UTF-16作为其内部字符表示的标准,这确保了在JVM内存中,所有字符都以统一的方式存储,避免了编码不一致带来的...

    字符编码过滤器 字符编码转换 post字符转换

    在IT行业中,字符编码是一个非常重要的概念,尤其是在处理多语言或者跨平台的数据交换时。本文将深入探讨"字符编码过滤...在实际项目中,应根据具体需求选择合适的字符编码策略,并确保所有组件都按照该策略进行操作。

    java获取字符串编码类型代码(导入直接查看结果)

    在Java编程语言中,处理字符串时,了解字符串的编码类型是非常重要的。编码类型决定了字符集,它定义了如何将字符转换为数字(字节)以及如何将数字转换回字符。常见的编码类型有ASCII、ISO-8859-1、UTF-8、GBK等。...

    java字符编码问题

    正确理解和处理Java中的字符编码问题是保证程序正常运行的关键。开发人员应该熟悉各种字符编码的特性和应用场景,并根据实际情况选择合适的编码方式,以避免因字符编码问题导致的数据错误或程序异常。希望本文能帮助...

Global site tag (gtag.js) - Google Analytics