字元集详细资料大全

字元集详细资料大全,第1张

字元(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字元集(Character set)是多个字元的集合,字元集种类较多,每个字元集包含的字元个数不同,常见字元集名称:ASCII字元集、GB2312字元集、BIG5字元集、 GB18030字元集、Unicode字元集等。计算机要准确的处理各种字元集文字,就需要进行字元编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单位元组字元设计的,因此,对中文字元进行编码,是中文信息交流的技术基础。

基本介绍 中文名 :字元集 外文名 :Character set 定义 :多个字元的集合 种类 :ASCII,GB2312,BIG5,GB18030等 ASCII,名称由来,特点,包含内容,技术特征,扩展字元集,GB2312,名称由来,特点,包含内容,技术特征,编码举例,BIG5,名称由来,特点,编码方法,局限性,GB18030,名称由来,特点,编码方法,包含内容,Unicode,名称由来,特征,编码方法,UTF-8 编码,比较, ASCII 名称由来 ASCII(American Standard Code for Information Interchange,美国信息互换标准编码)是基于罗马字母表的一套电脑编码系统。 特点 它主要用于显示现代英语和其他西欧语言。它是现今最通用的单位元组编码系统,并等同于国际标准ISO 646。 包含内容 控制字元:回车键、退格、换行键等。 可显示字元:英文大小写字元、阿拉伯数字和西文符号。 技术特征 7位(bits)表示一个字元,共128字元,字元值从0到127,其中32到126是可列印字元。 扩展字元集 7位编码的字元集只能支持128个字元,为了表示更多的欧洲常用字元对ASCII进行了扩展,ASCII扩展字元集使用8位(bits)表示一个字元,共256字元。 ASCII扩展字元集:它是从ASCII字元集扩充出来的,扩充后的符号增加了表格符号、计算符号、希腊字母和特殊的拉丁符号。 GB2312 名称由来 GB2312又称为GB2312-80字元集,全称为《信息交换用汉字编码字元集·基本集》,由原中国国家标准总局发布,1981年5月1日实施。 特点 GB2312是中国国家标准的简体中文字元集。它所收录的汉字已经覆盖9975%的使用频率,基本满足了汉字的计算机处理需要。在中国大陆和新加坡获广泛使用。 包含内容 GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字元。其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全形字元。 技术特征 (1)分区表示: GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。 各区包含的字元如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。 (2)双位元组表示 两个位元组中前面的位元组为第一位元组,后面的位元组为第二位元组。习惯上称第一位元组为“高位元组” ,而称第二位元组为“低位元组”。 “高位位元组”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位位元组”使用了0xA1-0xFE(把01-94加上0xA0)。 编码举例 以GB2312字元集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数电脑程式中,高位元组和低位元组分别加0xA0得到程式的汉字处理编码0xB0A1。计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。 BIG5 名称由来 又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五家软体公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。 Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾 当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。 特点 Big5字元集共收录13,053个中文字,该字元集在中国台湾使用。耐人寻味的是该字元集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。 编码方法 Big5码使用了双位元组储存方法,以两个位元组来编码一个字。第一个位元组称为“高位位元组”,第二个位元组称为“低位位元组”。高位位元组的编码范围0xA1-0xF9,低位位元组的编码范围0x40-0x7E及0xA1-0xFE。 各编码范围对应的字元类型如下:0xA140-0xA3BF为标点符号、希腊字母及特殊符号,另外于0xA259-0xA261,存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E为常用汉字,先按笔划再按部首排序;0xC940-0xF9D5为次常用汉字,亦是先按笔划再按部首排序。 局限性 尽管Big5码内包含一万多个字元,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假名字母。 例如台湾视“著”为“著”的异体字,故没有收录“著”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也没有收录到Big5之中。 GB18030 名称由来 GB 18030的全称是GB18030-2000《信息交换用汉字编码字元集基本集的扩充》,是我国 于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软体必须符合本标准。 特点 GB 18030字元集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。 GB18030 字元集 GB 18030字元集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字元集计算机编码问题。该标准的字元总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 30版本兼容,填补Unicode扩展字元字汇“统一汉字扩展A”的内容。并且与以前的国家字元编码标准(GB2312,GB130001)兼容。 编码方法 GB 18030标准采用单位元组、双位元组和四位元组三种方式对字元编码。单位元组部分使用0×00至0×7F码(对应于ASCII码的相应码)。双位元组部分,首位元组码从0×81至0×FE,尾位元组码位分别是0×40至0×7E和0×80至0×FE。四位元组部分采用GB/T 11383未采用的0×30到0×39作为对双位元组编码扩充的后缀,这样扩充的四位元组编码,其范围为0×81308130到0×FE39FE39。其中第一、三个位元组编码码位均为0×81至0×FE,第二、四个位元组编码码位均为0×30至0×39。 包含内容 双位元组部分收录内容主要包括GB130001全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双位元组编码的欧元符号等。 四位元组部分收录了上述双位元组字元之外的,包括CJK统一汉字扩充A在内的GB 130001中的全部字元。 Unicode 名称由来 Unicode字元集编码是Universal Multiple-Octet Coded Character Set 通用多八位编码字元集的简称,是由一个名为 Unicode 学术学会(Unicode Consortium)的机构制订的字元编码系统,支持现今世界各种不同语言的书面文本的交换、处理及显示。该编码于1990年开始研发,1994年正式公布,最新版本是2012年1月31日的Unicode 61。 特征 Unicode是一种在计算机上使用的字元编码。它为每种语言中的每个字元设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。 编码方法 Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,例如字母“A”的编码为 004116 和字元“”的编码为 20AC16。所以“A”的编码书写为“U+0041”。 UTF-8 编码 UTF-8是Unicode的其中一个使用方式。 UTF是 Unicode Tranformation Format,即把Unicode转做某种格式的意思。 UTF-8便于不同的计算机之间使用网路传输不同语言和编码的文字,使得双位元组的Unicode能够在现存的处理单位元组的系统上正确传输。 UTF-8使用可变长度位元组来储存 Unicode字元,例如ASCII字母继续使用1位元组储存,重音文字、希腊字母或西里尔字母等使用2位元组来储存,而常用的汉字就要使用3位元组。辅助平面字元则使用4位元组。 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字元编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个位元组编码UNICODE字元。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。 比较 UTF-16 和 UTF-32 编码 UTF-32、UTF-16和 UTF-8 是 Unicode 标准的编码字元集的字元编码方案,UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码;UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。

这些应该是从Unicode标准而来的术语,Unicode标准的核心是一个编码字符集,它为每一个字符分配一个唯一数字。Unicode标准始终使用16进制数字,并且在书写时在前面加上U+,如字符“A”的编码为“U+0041”。

代码点是指可用于编码字符集的数字。编码字符集定义一个有效的代码点范围,但是并不一定将字符分配给所有这些代码点。有效的Unicode代码点范围是U+0000至U+10FFFF。Unicode40将字符分配给一百多万个代码点中的96382个代码点。

代码单元可以理解为字符编码的一个基本单元,最常用的代码单元是字节(即8位),但是16位和32位整数也可以用于内部处理。

就Unicode标准来说,它的编码字符集有三种编码方案:UTF-32、UTF-16、UTF-8。UTF-32使用32位的代码单元表示一个Unicode代码点,UTF-16使用一个或两个16位的代码单元的序列对Unicode代码点进行编码,UTF-8 使用1至4个字节的序列对Unicode代码点进行编码。

sHighSurrogate(char ch) 判断给定char值是Unicode高代理项代码单元(也称为高级代理项代码单元)。这个值并不代表字符本身,而是在UTF-16编码的补充的字符的表示被使用。

代理项(Surrogate)

是一种仅在 UTF-16 中用来表示补充字符的方法。在 UTF-16 中,为补充字符分配两个 16 位的 Unicode 代码单元:

第一个代码单元,被称为高代理项代码单元或前导代码单元;

第二个代码单元,被称为低代理项代码单元或尾随代码单元。

这两个代码单元组合在一起,就被称为代理项对。

相关概念:

代码点(Code Point):

Unicode 代码空间中的任何值,即从 0 到 10FFFF16 的整数范围。但并非所有代码点都分配给编码字符。

一个字符在任何编码字符集中的值或位置。

代码单元(Code Unit):最小的数位组合,可以表示用于处理或交换的编码文本的单位。在 Unicode 标准中,UTF-8 编码格式采用 8 位编码单元,UTF-16 编码格式采用 16 位编码单元,UTF-32 编码格式采用 32 位编码单元。

BMP 字符(BMP Character):位于 BMP(Basic Multilingual Plane,多语种基本面)代码点的 Unicode 编码字符。

BMP 代码点(BMP Code Point):在 U+0000 到 U+FFFF 范围内的 Unicode 代码点。

补充字符(Supplementary Character):位于补充代码点的 Unicode 编码字符。

补充代码点(Supplementary Code Point):在 U+10000 到 U+10FFFF 范围内的 Unicode 代码点。

高代理项代码点(High-Surrogate Code Point):在 U+D800 到 U+DBFF 范围内的 Unicode 代码点。

高代理项代码单元(High-Surrogate Code Unit):在 D80016 到 DBFF16 范围内的 16 位代码单元,在 UTF-16 中用作代理项对的前导代码单元(Leading Code Unit)。

低代理项代码点(Low-Surrogate Code Point):在 U+DC00 到 U+DFFF 范围内的 Unicode 代码点。

低代理项代码单元(Low-Surrogate Code Unit):在 DC0016 到 DFFF16 范围内的 16 位代码单元,在 UTF-16 中用作代理项对的尾随代码单元(Trailing Code Unit)。

代理项对(Surrogate Pair):由两个 16 位代码单元组成,其中第一个是高代理项代码单元,第二个是低代理项代码单元。

代理项字符(Surrogate Character):用词不当。这表示一个编码字符只有一个代理项代码点,这是不可能的。所以请勿使用这个词。

详细释义:

关于代理项的概念,通俗来讲,就是为补充字符找两个“代理人”。由于补充字符体格壮硕,到了 UTF-16 这个地方就需要占用两个 16 位的座位。为了避免因“占座纠纷”导致意外发生,就需要为补充字符找来两个“代理人”,代替他来占用两个座位,这样就能皆大欢喜了。

两个“代理人”,就是高代理项和低代理项。

两个“代理人”占用的座位,就是 16 位的高代理项代码单元和低代理项代码单元。

两个“代理人”所在的位置,就是高代理项代码点和低代理项代码点。

两个“代理人”组合在一起,就是代理项对。

“代理人”一定是出双入对的。单身的“代理人”是不能表示补充字符的,只能被称为未配对代理项(Unpaired Surrogate)。

C++字符检测 TCharacter类:

  

c++ 字符检测的几个方法:

IsSurrogatePair,IsHighSurrogate,IsLowSurrogate,ConvertToUtf32

sample  code:

/ Calculate all all kinds of charcters in the memo /

for (int i = 1; i <= allTextLength(); ++i)

{        / Check for digit /

if (TCharacter::IsDigit(allText[i])) LDigits++;

/ Check for number /

if (TCharacter::IsNumber(allText[i])) LNumber++;

/ Check for letter /

if (TCharacter::IsLetter(allText[i])) LLetters++;

/ Check for lower-cased letter /

if (TCharacter::IsLower(allText[i])) LLower++;

/ Check for upper-cased letter /

if (TCharacter::IsUpper(allText[i])) LUpper++;

/ Check for punctuation /

if (TCharacter::IsPunctuation(allText[i])) LPuct++;

/ Check for separators /

if (TCharacter::IsSeparator(allText[i])) LSep++;

/ Check for symbols /

if (TCharacter::IsSymbol(allText[i])) LSymbols++;

/ Check for symbols /

if (TCharacter::IsWhiteSpace(allText[i])) LWhites++;

}

java的char是2字节,16bit,包含所有ascii字符,而且更多,api文档里有描述

char的数据是通过 UnicodeData 文件中的信息定义的,该文件是 Unicode Consortium 维护的 Unicode Character Database 的一部分。此文件指定了各种属性,其中包括每个已定义 Unicode 代码点或字符范围的名称和常规类别。

此文件及其描述可从 Unicode Consortium 获得,网址如下:

Unicode 字符表示形式

char 数据类型(和 Character 对象封装的值)基于原始的 Unicode 规范,将字符定义为固定宽度的 16 位实体。Unicode 标准曾做过修改,以允许那些其表示形式需要超过 16 位的字符。合法代码点 的范围现在是从 U+0000 到 U+10FFFF,即通常所说的 Unicode 标量值。(请参阅 Unicode 标准中 U+n 表示法的定义。)

从 U+0000 到 U+FFFF 的字符集有时也称为 Basic Multilingual Plane (BMP)。代码点大于 U+FFFF 的字符称为增补字符。Java 2 平台在 char 数组以及 String 和 StringBuffer 类中使用 UTF-16 表示形式。在这种表现形式中,增补字符表示为一对 char 值,第一个值取自高代理项 范围,即 (\uD800-\uDBFF),第二个值取自低代理项 范围,即 (\uDC00-\uDFFF)。

所以,char 值表示 Basic Multilingual Plane (BMP) 代码点,其中包括代理项代码点,或 UTF-16 编码的代码单元。int 值表示所有 Unicode 代码点,包括增补代码点。int 的 21 个低位(最低有效位)用于表示 Unicode 代码点,并且 11 个高位(最高有效位)必须为零。除非另有指定,否则与增补字符和代理项 char 值有关的行为如下:

只接受一个 char 值的方法无法支持增补字符。它们将代理项字符范围内的 char 值视为未定义字符。例如,CharacterisLetter('\uD840') 返回 false,即使是特定值,如果在字符串的后面跟着任何低代理项值,那么它将表示一个字母。

接受一个 int 值的方法支持所有 Unicode 字符,其中包括增补字符。例如,CharacterisLetter(0x2F81A) 返回 true,因为代码点值表示一个字母(一个 CJK 象形文字)。

在 Java SE API 文档中,Unicode 代码点 用于范围在 U+0000 与 U+10FFFF 之间的字符值,而 Unicode 代码点 用于作为 UTF-16 编码的代码单元的 16 位 char 值。有关 Unicode 技术的详细信息,请参阅 Unicode Glossary。

以上就是关于字元集详细资料大全全部的内容,包括:字元集详细资料大全、关于Java核心技术书中的代码点和代码单元是怎么理解的呢、c语言中ishighsurrogate的意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9699477.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存