萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 471|回复: 0

1-1-16-1-14 关于JAVA中文问题的一点个人心得

[复制链接]
发表于 2003-2-8 00:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
发信人: maquan ('ma:kju), 信区: Java      
标  题: 关于JAVA中文问题的一点个人心得
发信站: BBS 水木清华站 (Wed Jun 12 12:16:49 2002)

有关 JAVA 中文的问题真是层出不穷,版内几乎每天都有人在问,涉及到
字符串处理、JSP 显示、数据库存储等诸多方面。总而言之就是,文字不
听使唤,总出现乱码。

我本人也经历过很多类似的问题,个人的体会是,这类问题的表象是非常
复杂的,具体问题的具体解决方法也是不同的,但如果能对其中几个概念
区分清楚并彻底理解的话,对于自己动手解决问题是很有指导意义的,而
不至于从别人那儿得到了解决办法还不知道问题出在哪儿。

下面是我个人的一点心得,不对之处请方家指正  :)

最重要的就是要区分两个概念:charset 和 encoding!

character set,中文一般译为“字符集”,实际上它定义的是数值与图形
之间的关系。数值有时是单个整数(比如 unicode),有时是一对整数(比
如 GB2312)。图形就是这个字的笔划写法。举个例子,在 unicode 中,
“21313”这个数值就代表一横一竖的中文“十”字,而在 GB2312 中,则是
用“202/174”(就是我们常说的区位码 CA/AE)这对整数代表“十”字。

encoding,好像一般译为“编码方式”,实际上它定义的是数值在存储和传
输时的格式。比如 unicode 中的 21313 这个字符,如果用 UTF-8 格式存储,
就会在文件中占用 3 个字节,它们是 E5/8D/81,但如果用 UCS-2 格式存储,
就会在文件中占用 2 个字节,它们是 41/53。3 个字节也好,2 个字节也好,
目的都是为了保存“21313”这个值。而 GB2312 中的 CA/AE,保存成文件也
就是这两个字节。

我们平时遇到的词中,unicode、latin-1、CJK 等等,应该都是指 charset,
而象 UCS-2、UTF-8 等应该都是指 encoding,至于 GB2312,有些混乱,既
表示 charset,也表示 encoding(因为它的存储方式很简单,就是两个字节
原样存储)。一般来说,charset-encoding 是一对多的关系(?)。

回到 JAVA,JDK 的国际版是全程支持 UNICODE 的,一个主要表现就是它对
字符的内部存储格式采用 UCS-2,String.charAt() 得到的值永远是 unicode
字符集中的数值。

好了,说得比较罗嗦,希望能给那些对此问题感兴趣的朋友一些帮助。

参考文章:想必大家都听说过“两只老虎工作室”吧,劳虎的《无废话XML》
中有一章叫“Unicode说分明”,很有参考价值。这本书可以在
http://www.2tigers.net/下载。如果你搞清楚了 UTF-8 中是怎样用
E5/8D/81 来表示 21313 的,就很容易理解 encoding 和 charset 的关系了。


发信人: maquan ('ma:kju), 信区: Java      
标  题: Re: 关于JAVA中文问题的一点个人心得
发信站: BBS 水木清华站 (Wed Jun 12 20:20:36 2002)

【 在 newlife99 (aa) 的大作中提到: 】
: 好文章,
: 能否举几个常见的乱码的例子,
: 再按照这个角度去解决一下。
: //thank

多谢鼓励  :)

我所谈到的所谓心得,只是想明确一个容易被忽视混淆的概念(这是我自己的
亲身经历),它是在发现问题后对问题进行分析时的一个基础、出发点,其本
身并不具有解决问题的可操作性。

具体问题的表象是多种多样的,要分析清楚,除了有明确的概念、清晰的思路,
还要有相应的知识和经验,比如:
   javac 是如何确定以何种 encoding 来理解 .java 文件的?
   程序中 FileReader 是如何确定 encoding 的?
   如何告诉 Application Server 你的 JSP 文件是以什么 encoding 编写的?
   如何在同一个 WEB 页面中显示中文、韩文和阿拉伯文?
   Oracle 数据库中 charset 的设置对 java 程序有什么影响?
   ……
总之是具体问题具体分析啦  :)
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-6-15 09:23 , Processed in 0.053012 second(s), 16 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表