当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 概述 世界上的各地区都有本地的语言。
 

 

    摘要: 测试程序: public class test { private string name; public string getname() { return name; } public void setname(string name) { this.name = name; } public test() { } public void call(......
 ·记住jsp内置对象的简单方法    »显示摘要«
    摘要: 首先申明,此方法只是为了更容易机械地记忆那几个对象。在分析理解jsp编译成.java的servlet后,就知道这几个对象是怎么回事了。 大家先记住一个单词:parscope (气象雷达)示波器 正好是几个对象的首字母,其中exception在jsp1.2 的规范中有。 page application request (response) session config out......


深入剖析JSP和Servlet对中文的处理过程
概述

【程序编程相关:JavaMail操作的总结(2)

【推荐阅读:用javamail显示复合邮件的内容(3

世界上的各地区都有本地的语言.地区差异直接导致了语言环境的差异.在开发一个国际化程序的过程中,处理语言问题就显得很重要了. 【扩展信息:JavaMail操作的总结(4)

这是一个世界范围内都存在的问题,所以,java提供了世界性的解决方法.本文描述的方法是用于处理中文的,但是,推而广之,对于处理世界上其它国家与地区的语言同样适用.

汉字是双字节的.所谓双字节是指一个双字要占用两个byte的位置(即16位),分别称为高位与低位.中国规定的汉字编码为gb2312,这是强制性的,目前几乎所有的能处理中文的应用程序都支持gb2312.gb2312包括了一二级汉字与9区符号,高位从0xa1到0xfe,低位也是从0xa1到0xfe,其中,汉字的编码范围为0xb0a1到0xf7fe.

另外有一种编码,叫做gbk,但这是一份规范,不是强制的.gbk提供了20902个汉字,它兼容gb2312,编码范围为0x8140到0xfefe.gbk中的所有字符都可以一一映射到unicode 2.0.

在不久的将来,中国会颁布另一种标准:gb18030-2000(gbk2k).它收录了藏.蒙等少数民族的字型,从根本上解决了字位不足的问题.注意:它不再是定长的.其二字节部份与gbk兼容,四字节部分是扩充的字符.字形.它的首字节与第三字节从0x81到0xfe,二字节与第四字节从0x30到0x39.

本文不打算介绍unicode,有兴趣的可以浏览“http://www.unicode.org/”查看更多的信息.unicode有一个特性:它包括了世界上所有的字符字形.所以,各个地区的语言都可以建立与unicode的映射关系,而java正是利用了这一点以达到异种语言之间的转换.

在jdk中,与中文相关的编码有:

表1 jdk中与中文相关的编码列表

编码名称

说    明

ascii

7位,与ascii7相同

iso8859-1

8-位,与 8859_1,iso-8859-1,iso_8859-1,latin1...等相同

gb2312-80

16位,与gb2312,gb2312-1980,euc_cn,euccn,1381,cp1381, 1383, cp1383, iso2022cn,iso2022cn_gb...等相同

gbk

与ms936相同,注意:区分大小写

utf8

与utf-8相同

gb18030

与cp1392.1392相同,目前支持的jdk很少

在实际编程时,接触得比较多的是gb2312(gbk)与iso8859-1.

为什么会有“?”号

上文说过,异种语言之间的转换是通过unicode来完成的.假设有两种不同的语言a与b,转换的步骤为:先把a转化为unicode,再把unicode转化为b.

举例说明.有gb2312中有一个汉字“李”,其编码为“c0ee”,欲转化为iso8859-1编码.步骤为:先把“李”字转化为unicode,得到“674e”,再把“674e”转化为iso8859-1字符.当然,这个映射不会成功,因为iso8859-1中根本就没有与“674e”对应的字符.

当映射不成功时,问题就发生了!当从某语言向unicode转化时,如果在某语言中没有该字符,得到的将是unicode的代码“\uffffd”(“\u”表示是unicode编码,).而从unicode向某语言转化时,如果某语言没有对应的字符,则得到的是“0x3f”(“?”).这就是“?”的由来.

例如:把字符流buf =“0x80 0x40 0xb0 0xa1”进行new string(buf, "gb2312")操作,得到的结果是“\ufffd\u554a”,再println出来,得到的结果将是“?啊”,因为“0x80 0x40”是gbk中的字符,在gb2312中没有.
...   下一页
    摘要: j2me midp currency converter tutorial for netbeans ide 4.0 feedback http://www.netbeans.org/kb/articles/tutorial-currencyconverter-40.html feedback the currency converter application you......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE