JAVA中文问题浅析.pdf

上传人:爱问知识人 文档编号:3659913 上传时间:2019-09-19 格式:PDF 页数:3 大小:268.51KB
返回 下载 相关 举报
JAVA中文问题浅析.pdf_第1页
第1页 / 共3页
JAVA中文问题浅析.pdf_第2页
第2页 / 共3页
JAVA中文问题浅析.pdf_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《JAVA中文问题浅析.pdf》由会员分享,可在线阅读,更多相关《JAVA中文问题浅析.pdf(3页珍藏版)》请在三一文库上搜索。

1、山 东 滩 分织 交 尧 济2 0 0 8 年第2 期( 总第 1 4 4 期) Jav a 中文问题浅析 王伦刚 ( 潍坊学院计算机与通信工程学院山东雄坊2 6 1 0 6 1 ) 摘要:本文介绍不同编码方式与J av a 的关系 用中出现的乱码、数据库应用中出现的乱码出发, 关键词: J av ;中文问 题;字符集;编码转换 中图分类号: T P 3 91. 2文献标识码: B , 根据不同原因分别从文件和流出现的乱码、 web 应 剖析产生乱码的原因, 提出 各自 的解决方法。 文章编号: 1 6 7 3 一 0 9 6 8 ( 2 0 0 8 ) 0 2 一 0 0 9 8 一 0 3

2、 A n a l y s is a b o u t J a v a Q u e s t io n s i n C h in e s e Wa n g L u n g a n g ( C o l l e g e o f C o m P u te r a n d C o m m u n i c atio n E n g i n e e ri n g W七 l fa n g U n i v e r s i t y,W七 i fa n g 2 6 1 0 6 1 , C hi n a) A b s t ra C t : T h 1 s P ape r i n trod u c e s th e re

3、l atio n betwe e n v ario u s e n c odin g ty peand J a v a,fromth e P o s i ti o n of c o n fu s i onc o d e i n fi leand s tr e am , and i n we b aPP l i c atio n , aPP l i c ation q u e s ti onind a t a b as e , it t a k e s ap叭 th e c a u s e o f c o n fu s i o n c o d e , P u t s fo rwar d s v

4、ario u s s o l v in g m e th o d s . K e y wo r d s : J a v a , que s ti o n s i n C h i n e s e , c h ar ac te r s e t , e n c o d i n g tr a n s i ti o n 1引言 现在大多数国际性的软件内部均采用U ni code 编码,在软件运行时,它获得本地系统默认支持的 编码格式, 然后再将软件内部的U 垃c o de转化为本。 地系统默认支持的格式显示出来。 11 通常我们在处理 本地字符的过程中需要实现U ni c o de 和本地字符集 的相互

5、转换, 甚至可以U nicode为中介实现两个不 同 本地字符集的相互转换:我们的中 文是双字节编 码,为了能让计算机处理中文,我们自己制定的 G B 231 2 、 G B K 等标准以适应计算机处理的需求。 所 以, 大部分的操作系统为了适应我们处理中文的需 求,均定制有中文操作系统,它们采用的是G B K、 G B 2312编码格式以正确显示我们的中文。 Jav a 语言内部就是使用了U nicode编码方式, 这就是说不管中文字符还是英文字母在Jav a 中都是 双字节编码,即一个两个字节的空间。但是Win一 d o ws 系统本身不支持U ni code编码的显示, 要正确 显示中文

6、字符就必须进行编码转换, 否则就将会显 示为乱码。 Jav a 里出现的中文要正确显示, 需要保 证输入和输出的编码格式一致,即在 “ J a v a 源代 , 码一 Jav a 字节码一 虚拟机一 操作系统一 显示设 备” 中的每一步都必须正确处理中文的编码尸另外, 不同的操作系统默认的字符集是不同的, 在处理中 9 8 文问题上要考虑到系统默认支持的字符集,如 L inux 系统通常支持1 5 0 8 8 5 9 一 1 , 而WinZ O 0 0 中文 系统支持G B K 。 Ja v a 中容易 产生中 文乱码的地方很 多, 如在Jav a 文件和流的使用、 We b 页面的编码、 数

7、据库编码等都可能产生乱码。下面就这三方面分 别分析一下原因并给出相应的解决措施。 ZJ a va与文件/ 流之间的乱码 J a v a读写文件最常用的类是F i l e l n p u t S t rea m / F ll eo u t P ut s t rea m和F il eR e a der / F il e Wr i t e r 。其中F i l el n P u ts t rea m和F i l eo u t P u t S tr e a m是基于字节流的, 常用于读写二进制文件。 F ile R eader 和F ile wri te r 是基于字符流的, 常 用 于读写字符文件。

8、 但这两个类的构造函数默认使用 系统的编码方式, 如果文件内容与系统编码方式不 一致, 可能会出现乱码。在这种情况下,建议使用 F il eR ead e r 和F ile wri t e r 的父类: I fiPu t s t rea m R ea der/o ut p u t st re a mwriter, 它 们也是基 于字 符的,但在构造函 数中可以指定编码类型: Inp ut S trea mRea der ( I n p u t s t r e a min, C han 祀 t cs ) 和 o u t PJt st找 坦 mwri 权 犷( o u t p u t st获 汾

9、mo u t , C hars d cs) 。 3s e r v le t / J S p 中的 乱码 从服务器端的Servle t/JsP 到客户端浏览器的 万方数据 PDF Watermark Remover DEMO : Purchase from www.PDFWatermarkR to remove the watermark 2 0 0 8 年第2 期( 总第1 4 4 期) 显示过程如图1 。 山 东 坊 魂 反 经 济 J a v a 源文件 客户端浏览器 图 1 3 . IJ SP文件编译 J S P / SerVl e t 引擎根据J SP文件中用 ” % 中指定的cha

10、r se t 进行编译。 如果在JsP 文件中 未指定, 则取J V M中的默认设置的f ll e . e n c o d i n g ,一般情况下这个值是1 5 0 8 8 5 9 一1 。 15 0 8 8 5 9 一 1 是一种8 位字节的编 码,当将一个双字 节的中文字符映射为150 8 8 59一 1 编码时, 就会出现 乱码的现象。因此,在网页中要正确显示中文,无 论对于中文或英文操作系统, 只要将 都设 置成G B K就可以了。 3 . ZJ a va文件编译 J a v a 源文件需要编译成d a ss文件才能在J V M 中 执行, 同 样存在上 述的f ll e . enc

11、od in g 编 码问 题。 跳介l e t 的编译不是自 动执行的。 对于JSP程序, 对 产生的J ava中间文件的编译是自动执行的( 在程序 中直接调用sun . to o is . j a v ac. M a in 类) 。 要是在这里 出现中文乱码问题, 同样需要检查e n c o d l n g 的设置, 或者将内嵌在J SP代码中的中文字符转化为 U nic o d e 的形式传输出去。对于Servl et, 编译的时 候只需指定一 e n c o dj 的 9 就可以了。 3 . 3C 0 n t e nt一 T y pe的设置 为了保证客户端能正确显示中文字符, Servl

12、 e t 需要将 H T ML页面内容转换为客户端浏览器可接 受的e n c o din g 编码方式发送出去。通常我们指定 e n o d l n g 值保证中文字符能正确地传输。 对于含有 中 文字符的网 页, 在J sP头中 添 加这一句 指 定, Servl e t 中使用方法se tC 0 n t e n t Type ( “ 记 x t / h t n il 。 C h a n 犯 t = G B K ” ) 设定。 3 . 4 参数的传递 对于从客户端传过来的参数, 有两种情形: 一 是通过提交表单的方式, 另一个是传人的U R L 串中 带有参数。如果没有指定编码方式, 这两种

13、方式都 按照默认的15 0 8 8 59一 1 编码形式传递。 要想中文字 符正确显示在网页上, 就必须得用p a ra m e t e r = new S t ri n g( 那ra m eter . g etB yteS( “ 8 8 5 9 一 1 ” ) , ” G B K ” ) 进行转换, Wl n d o ws和L in ux这两种系统都是一样 的。 有一个简 单方法, 就是在g etP ara m e t e r ( ) 方法 获 取参数之前, 使用 r eq u es t . set C h a ra c t e r E nco d 一 加9( ” G B K ” ) , 将

14、提交的信息转化为 G B K编码。 4数据库中出现的乱码 数据库中的乱码问题和Web应用中的乱码问题 类似, 都是因为传入的是G B K或G B 2 3 12 编码, 而 对方却以15 0 8 8 59一 1 处理。 一般关系数据库都支持 数据库的E nco d ing 设置。 因此, 在创建数据库时选 择合适的编码方式如G B K 、 U T F 一 8 , 这样数据以设 定的编码方式存储。在数据库的输人和输出能够自 动进行数据转换, 这样保证数据的正确性。建议不 要选择150 8 8 5 9 一 1 ,它是一种8 位的编码格式, 会 给数据库应用带来复杂性。 另外, J D B C向数据库

15、中插人数据或从数据库 中提取数据时,有时也会出现中文乱码的问题。这 个问题主要与J D B C驱动本身有关。目 前大多数 J D B C 驱动采用的是本地编码格式来传输中文字符, 例如中文字符“ 0 x 4 1 7 5 ” 会被转成“ o x 4 1 ” 和“ 0x7 5 ” 进行传输。因此我们需要对J D B C驱动返回的字符 以及要发给J D B C 驱动的字符进行转换。 当用J D B C 驱动向数据库中插人数据时, 需要先将U ni code转 成n a t i v ec o d e ,当 J D B C 驱动从数据库中 查询数 据时, 则需要将nat l v ecode转换成U r

16、u c o de。 下面 给出了这两种转换的实现: S t ri n gn a tive ZU ni code( S t ri n gs ) if( 5 = 二n 血 1! 5 。 l e 翔 扩 h ( ) = =0 ) r e t u m n u ll。 b 训 域 b of l e r =n e , 7 b yt颐 5 . l e n gt h ( ) 1 , fo r ( int i =0 , 1 5 . l e n gt h ( ) ; 1+ ) 笼 if( 5 ; C h a rAt ( 1 ) =Oxl oo ) 滚 c=5 . 山a 认t ( 1 ) 。 9 9 万方数据 PD

17、F Watermark Remover DEMO : Purchase from www.PDFWatermarkR to remove the watermark 山 东 防 魂 只经 济2 0 0 8 年第2 期( 总第1 4 4 期) b y 比【 孙 吐 =( , ” + c ) 。 g e t B ytes ( ) , b ul 挽 甫+ + =( cha r ) b 哎0 , b u fl 泊 币+ + =( c har ) b ufll . elSe b u 代 e 山+ + 1 =5 . CharAt( 1 ) 。 代 t u r nn e , 叮 S t ri n g ( b

18、 ul 挽 r , 0 , j) 。 除使用上述方法之外, 有些J D B C 驱动如果对 J D B C驱动管理器设置了 正确的字符集属性,以上 的方法就不需要了。 5小结 由上面的分析知道, J a v a 源文件是按照fi le. enc o d ing 属性编译的, 将Class文件存储为U r u c o de 的编码格式。 读取d a ss文件一律是以U n 1 C 0 de进行, 从Java字节流到字符流都隐含编码转换 ( 按照操作 系统默认的编码格式) 。 Java中字符是以双字节存储 的, 英文字母在任何平台下都不会出现乱码, 因为 这部分在不同字符集中都是兼容的。 而中文乱

19、码问 题, 归根结底是因为向系统传递了错误的enc O d l n g 编码方式。 总之, Java的创始者 ( Jav aS o ft ) 已经考虑到 J ava 编程语言对多国字符的支持, 只是现在的解决 方案有很多缺陷在里面, 需要额外付诸一些补偿性 的措施尸而世界标准化组织也在努力把人类所有的 文字统一在一种编码之中,其中一种方案是 15 0 1 0 6 4 6 , 它用4 个字节来表示一个字符。 . 参考文献: 【 1 S unwh比 e P 聊r , 如 t e r 、 t lonan z a t 沁 n , ht t p : / 月 a va. s u n . 姗 , 2 0 0

20、 1 . a 徐诚, 徐敬. J SP中文问题分析及解决方案 u. 计算机时代, 2 0 0 3 ;( 1 2 ) 。 3 文,召 . J S p 乱码分析 E B / 0 L I . 饥 t p : / / w w w , 沈 r t . 。 阴 刀 , 2 0 0 4 . ( 上接 1 0 5 页) 师型”实践指导教师。由于实践教学基地一般实行 开放式管理, 开放时间长,教学和管理互相渗透和 交错,因此其指导教师必须具有较高的政治思想、 专业技术、实践经验及管理等素质。 高职校内和校外实践教学基地都应分别体现四 种功能。校内实践教学基地的功能包括教学功能、 教研与对外技术服务功能、 小型生

21、产功能和职业技 能鉴定功能。其中教学功能要做到既在校内对在校 学生进行实验、实训和实习教学,又能利用校内基 地教学资源,为企业培训员工。校外实践教学基地 的功能包括专业实践技能教学功能、科研与技术服 务功能、社会知识教育功能。为发挥校内基地的教 学功能,可采用专业群实训法、开放式实验法、网 上选实验课等专业群实训法进行实践教学,使基地 资源得到充分利用,实践教学质量不断提高。学生 在校外实习基地培训期间, 可让学生适当进行一些 社会调查,使他们熟悉社会, 增长知识, 提高适应 未来工作的能力, 并使他们树立正确的世界观、人 1 oo 生观和价值观。 三、实践教师队伍建设 加强实践教学教师队伍建

22、设、 是提高实践教学 水平的必备条件之一, 是开展实践教学的重要保证。 实践教学师资队伍应为 “ 双师型” 。 因为他们不仅要 胜任高职实验、 实训和实习等形式的实践教学工作, 而且还要根据工作需要担负某门专业理论课教学工 作。理论课教师也应具有较强的专业实践技能, 他 们能根据工作需要担负某些项目的实践教学工作。 没有高素质的 “ 双师型”教师指导实践教学, 实践 教学的质量就无法保证, 实践教学的任务和目 标也 就难以实现。 为提高教师队伍的政治思想素质, 应 组织他们参加学院的集体政治理论学习和其他形式 的政治思想教育活动,同时在学院营造良 好的政治 思想教育氛围。为提高教师队伍的业务素质,应积 极创造条件,支持实践教学人员学习深造,钻研专 业技术,不断提高他们的专业理论水平。今 万方数据 PDF Watermark Remover DEMO : Purchase from www.PDFWatermarkR to remove the watermark

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1