中文编码问题_第1页
中文编码问题_第2页
中文编码问题_第3页
中文编码问题_第4页
中文编码问题_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、中文编码问题 .txt 熬夜,是因为没有勇气结束这一天;赖床,是因为没有勇气开始这一天。朋友,就是将你看透了还能喜欢你的人。 3月15日Java 中如何正确使用字体编码 (ZT)Java 中如何正确使用字体编码Java 中文显示的几个关在 Java 编程中,中文字体编码难倒了不少程序员,如果抓住了影响 键因素,问题将迎刃而解。Java 是目前最流行的面向对象的编程语言之一, Java 支持 UTF-8、ISO-8 859-1、GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在 Java 中如何正确显示中文的文章, 但都不够全面, 笔者特意总结如下

2、。影响 Java 中字体编码正确显示的有几个因素 : 1)数据库的连接方式 ; 2)网页中使用的字体编 码; 3)数据库里存放数据的字体编码 ; 4)Java 的缺省字体编码。如果在编程中遇到不能正确 显示中文时,要先弄清楚以上几项所使用的字体编码,再分析找出原因,即可解决问题。众所周知,JSP是Java的一种,和网页有关,而网页也有自己的中文编码系统,所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2,数据库连接驱动是用 org.gjt.mm.mysql.Driver,这里主要讨论 UTF-8 和 GBK的显示(GB2312 是 GBK的一个子面第集,Jav

3、a中可以使用GBK来代替GB系列)。我们先来研究 JSP中字体编码问题,到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别,咱们分别说明,前三点是从读取数据库到显示在网页, 后三点是从网页输入数据到存入数据库 ),第七到 第九点针对纯 Java 的类文件。 以下 rs 表示 ResultSet 的一个实例,是执行 Select 语句之 后产生的数据集。一、数据库连接方式使用 UTF-8在连接数据库的驱动后面加上这句参数 useUnicode=true&characterEncoding=true&characterEncoding=UTF-8 果数据库里存

4、放的字String(rs.getBytes(1),"UTF-8")据库里存放的是GBK数据,那么UTF-8,例如 jdbc:mysql:/localhost/DBVF?autoReconnect=true&useUnicode=,从数据库里读出中文显示在使用GBK的JSP的网页里,女0体 编 码 是 UTF-8 , 在 JSP 中 使 用 str=new或者 str=rs.getString(1) ,可以正确显示中文。如果数显示正确的中文。值得注意的是如果页面使用str= new Stri ng(rs.getBytes(1),"GBK") 放的是

5、GBK无法直接显示中文,需要 再 str=new String(str.getBytes("UTF-8"),"GBK")JSP 中也要使用 str= new String(rs.getBytes(1),"GBK") 来UTF-8,数据库里存放的是UTF-8,也可以用正确显示中文。如果网页是UTF-8,而数据库里存 2 步转换 , str=new String(rs.getBytes(1),"GBK");,才可以正确显示中文。二、数据库连接方式使用 GBK在连接数据库的驱动后面加上这句参数 useUnicode=tr

6、ue&characterEncoding=GBK,例如 jdbc:mysql:/localhost/DBVF?autoReconnect=true&UseUnicode=true&characterEncoding=GBK ,从数据库里读出中文,显示在使用GBK的 JSP的网页里,如果数据库 里 存 放 的 字 体 编 码 是 UTF-8 , 在 JSP 中 一 定 要 使 用 str=new Strin g(rs.getBytes(1),"UTF-8"),才正确显示中文。如果数据库里存放的是GBK数据,那么 JSP 中 也 要 使 用 str=ne

7、w 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) 方法来显示中文。三、使用

8、缺省数据库连接方式,例参连 接 数 据 库 的 驱 动 后 面 没 有 这 句 参 数 useUnicode=&characterEncoding= jdbc:mysql:/localhost/DBVF?autoReconnect=true , 没 有 useUnicode=true&characterEncoding ,表示使用默认的 ISO-8895-1 编码。UTF-8,str= new1. 从数据库里读出中文,显示在GBK的网页里。如果数据库里存放的字体编码是JSP 网页中一定要使用语句 str=new String(rs.getBytes(1),"UTF-8

9、")或者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, 需

10、要 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")就可以显示中文了。以上是读

11、取数据库里中文正确显示在网页上,下面三点是如何正确存入数据库。四、数据库连接方式使用 UTF-8 编码JSP 中 要 把 网 页 输 入 的 中 文 存 入 数 据库 , 通常 有 一 个 提 交 (Submit) 的 过 程 , 是 用 str=request.getParameter("username") ,然后执行 update 或者 insert 语句来存入数据库。 如何赋值给 str 很重要,而且这里中文输入与网页所使用的字体编码有关。str= new 或者 str= ,都可以使得存到数1、网 页 使 用 UTF-8 , 使String(request.getP

12、arameter("username").getBytes("ISO-8859-1"),"UTF-8") new String(request.getParameter("username").getBytes(),"UTF-8") 据库里的数据是 UTF-8 编码。2. 网 页 使 用 GBK ,String(request.getParameter("username").getBytes(),"GBK") UTF-8 编码。str=new用,那么存入

13、数据库的是3. 值得注意的是使用 UTF-8 的数据库连接方式不能存得 GBK。五、数据库连接方式使用GBK编码1. 输 入 使 用 GBK 网 页 , 存 到 数 据 库 里 是 GBK 的 方 法 :String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK")new String(request.getParameter("username").getBytes(),"GBK")str= new 或 者 str=2

14、. 网 页 使 用 GBK, 想 存 入 UTF-8 到 数 据 库 里 , 要 分String(request.getParameter("username").getBytes(),"GBK")String(str.getBytes("UTF-8"),"GBK") 即可。2 步 :,再str=newstr=new3. 网 页 使 用 UTF-8 , 而 且 使String(request.getParameter("username").getBytes("ISO-8859-1&q

15、uot;),"GBK") new String(request.getParameter("username").getBytes(),"UTF-8")的数据是UTF-8编码。str=或 者 str=,那么存到数据库里new4. 网 页 使 用 UTF-8 , 而 且String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8") 数据库里的数据是GBK编码。str= new,那么存到六、数据库连接

16、方式使用缺省,即不使用参数useUnicode 和 characterEncoding或者 str= newGBK,则存入数据库是1. 网页 使用 GBK, 如果使 用 str= request.getParameter("username") String(request.getParameter("username").getBytes(),那么在数据库里的数据是码。网页使用 UTF-8 和使用 str= request.getParameter("username")str= new,那么根据网页提供UTF-8 编码,如UTF-

17、8编码。2. 如 果 使 用 String(request.getParameter("username").getBytes("ISO-8859-1") 的字体编码而存到数据库里,比如是 UTF-8 的网页,那么存到数据库中就是 果使用GBK网页,那么存到数据库里的字就是GBK编码。str= new 这一种组合能存 UTF-8 组合的特3. 如果使用String(request.getParameter("username").getBytes("UTF-8"),"UTF-8") 到正确的数据

18、外,其他存到数据库里的数据则都是乱码或者错误码。在这个 例中,网页使用的是 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")GBK5.网页是UTF-8的,不能存得GBK在数据库里,一句

19、话,改变数据库连接方式不能存得 码。以上所有的都是基于 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 ,String(rs.getString(2).getByt

20、es(),"UTF-8"), 数据库,即存得GBK如果使用content= 或者 content= new String(rs.getString(2).getBytes() 编码。new 再直接使用 update 或者 insert 语句插入到new String(rs.getString(2).getBytes(),"GBK") ,再存入数据库即存得还是如果 转 换为 GBK, 使用 content=UTF-82. 数 据 库 里 的 中 文 是 GBK,如果转换为 UTF-8, 使 用 content=newString(rs.getString(

21、2).getBytes("UTF-8")或者content=newString(rs.getString(2).getBytes("UTF-8"),"GBK"),再直接使用update 或者 insert语句插入到数据库 , 即存得 UTF-8。3. 如 果 某 个 String 是 GBK,要转换为UTF-8 , 也是 使 用 content=newString(GBKstr.getBytes("UTF-8")或者content=new如果某个 String是UTF-8,要转换为 GBK应。String(GBKstr.getBytes("UTF-8"),"GBK");该使用 new String(UTFstr.getBytes("GBK"),"UTF-8")九、数据库连接方式使用缺省 , 即不跟参数,可以将数据库里的 GBK1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论