疯狂

STANDING ON THE SHOULDERS OF GIANTS
posts - 481, comments - 486, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java字符集

Posted on 2009-08-04 17:05 疯狂 阅读(1356) 评论(1)  编辑  收藏 所属分类: java
 

 ASCII 字符集

  1.名称的由来

  ASCIIAmerican Standard Code for Information Interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统。

  2.特点

  它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO 646

  3.包含内容

  控制字符:回车键、退格、换行键等。

  可显示字符:英文大小写字符、阿拉伯数字和西文符号

  4.技术特征

  7位(bits)表示一个字符,共128字符

  5ASCII扩展字符集

  7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。

  ASCII扩展字符集比ASCII字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

  GB2312 字符集

  1.名称的由来

  GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集·基本集》,由原中国国家标准总局发布,198151日实施。

  2.特点

  GB2312是中国国家标准的简体中文字符集。它所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。

  3.包含内容

  GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

  4.技术特征

  (1)分区表示:

  GB2312中对所收汉字进行了分区处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

  各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

  (2)双字节表示

  两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为高字节,而称第二字节为低字节

  高位字节使用了0xA1-0xF7(01-87区的区号加上0xA0)低位字节使用了0xA1-0xFE(01-94加上0xA0)

  5.编码举例

  以GB2312字符集的第一个汉字字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1

  BIG5 字符集

  

  1.名称的由来

  又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。

  Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。

  2.特点

  Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:”(0xA4610xC94A)”(0xDCD10xDDFC)

  3.字符编码方法

  Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为高位字节,第二个字节称为低位字节。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E0xA1-0xFE

  各编码范围对应的字符类型如下:0xA140-0xA3BF为标点符号、希腊字母及特殊符号,另外于0xA259-0xA261,存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E为常用汉字,先按笔划再按部首排序;0xC940-0xF9D5为次常用汉字,亦是先按笔划再按部首排序。

  4Big5 的局限性

  尽管Big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假名字母。

  例如台湾视的异体字,故没有收录字。康熙字典中的一些部首用字()、常见的人名用字() 也没有收录到Big5之中。

  GB18030 字符集

  1.名称的由来

  GB 18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000317日发布的新的汉字编码国家标准,2001831日后在中国市场上发布的软件必须符合本标准

  2.特点

  GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。

  GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312GB13000.1)兼容。

  3.编码方法

  GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分使用0×000×7F(对应于ASCII码的相应码)。双字节部分,首字节码从0×810×FE,尾字节码位分别是0×400×7E0×800×FE。四字节部分采用GB/T 11383未采用的0×300×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×813081300×FE39FE39。其中第一、三个字节编码码位均为0×810×FE,第二、四个字节编码码位均为0×300×39

  4.包含的内容

  双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。 四字节部分收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1中的全部字符。

  Unicode字符集

  1.名称的由来

  Unicode字符集编码是Universal Multiple-Octet Coded Character Set 通用多八位编码字符集的简称,是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字符编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2005331日的Unicode 4.1.0

  2.特征

  Unicode是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

  3.编码方法

  Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为 004116 和字符“?”的编码为 20AC16。所以“A”的编码书写为“U+0041”

  4UTF-8 编码

  UTF-8Unicode的其中一个使用方式。 UTF Unicode Translation Format,即把Unicode转做某种格式的意思。

  UTF-8便于不同的计算机之间使用网络传输不同语言和编码的文字,使得双字节的Unicode能够在现存的处理单字节的系统上正确传输。

  UTF-8使用可变长度字节来储存 Unicode字符,例如ASCII字母继续使用1字节储存,重音文字、希腊字母或西里尔字母等使用2字节来储存,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。

  5UTF-16 UTF-32 编码

UTF-32UTF-16 UTF-8 Unicode 标准的编码字符集的字符编码方案,UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数



Java 编程技术中汉字问题的分析及解决

Java 源代码-> Java 字节码,标准的 Java 编译器 javac 使用的字符集是系统默认的字符集,比如在中文 Windows 操作系统上就是 GBK ,而在 Linux 操作系统上就是ISO-8859-1,所以大家会发现在 Linux 操作系统上编译的类中源文件中的中文字符都出了问题,解决的办法就是在编译的时候添加 encoding 参数,这样才能够与平台无关。用法是

javac -encoding GBK

 编译时:先将源代码转换成指定的encoding 然后转换为unicode 然后解析成指令的class 最终的classunicode格式

Web编码问题

JSP 编译。Java 应用服务器将根据 JVM file.encoding 值读取 JSP 源文件,编译生成 JAVA 源文件,。。。编译。。。再根据 file.encoding 值写回文件系统。

在向页面写值的是很实用PrintWriter out=res.getWriter() 取代 ServletOutputStream out=res.getOutputStream(). PrinterWriter 将根据contentType中指定的charset作转换 (ContentType需在此之前指定!);

如果通过 get/post 方式从 browser 返回的参数值中包含汉字信息, servlet 将无法得到正确的值,HttpServeletRequest.setCharacterEncoding 用于在调用 request.getParameter(“param_name”) 前指定应用程序希望的 encoding,这将有助于彻底解决这个问题。

Unicode规范中推荐的标记字节顺序的方法是BOMBOM不是“Bill Of Material”BOM表,而是Byte Order Mark

(Unicode
是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCSUCS可以看作是"Unicode Character Set"的缩写。)

UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFEUCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM
Java 中直接使用Unicode 转码时会按照UTF-16LE 的方式拆分,并加上 BOM如果采用 UTF-16 拆分,在 Java 中默认采用带有 BOM UTF-16BE 拆分。 (其实UnicodeUTF-8是完全一样的)http://topic.csdn.net/u/20081009/09/e899898c-591f-4985-ae88-5972475708fb.html

  


评论

# re: java的基本字符集是什么  回复  更多评论   

2013-09-19 19:27 by 谢刚
想知道java的基本字符集有哪些,分别有什么样的字符。。。谢谢。

只有注册用户登录后才能发表评论。


网站导航: