Java编程中如何选择正确的字符编码_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java编程中如何选择正确的字符编码

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

 2013/10/11 18:22:01  vipshichg  程序员俱乐部  我要评论(0)
  • 摘要:Java是目前最流行的面向对象的变成语言之一,Java支UTF-8,ISO-8859-1、GBK等各种字体编码,可笔者发现Java中字体编码的问题仍困倒了不少程序员,网上虽然也有不少关于再Java中如何正确显示中文的文章,但都不够全面,笔者特意总结如下》影响Java中字体编码正确显示的有几个因素:1)数据库的链接方式;2)网页中使用的字体编码;3)数据库里存放数据的字体编码;4)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?。

发表评论
用户名: 匿名