字符集和编码
常用字符集编码详解:ASCII 、GB2312、GBK、GB18030、...

ASCIIASCII码是7位编码,编码范围是0x00-0x7F。
ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。
其中0x00-0x20和0x7F共33个控制字符。
只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。
HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。
早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。
GB2312GB2312是基于区位码设计的,区位码把编码表分为94个区,每个区对应94个位,每个字符的区号和位号组合起来就是该汉字的区位码。
区位码一般用10进制数来表示,如1601就表示16区1位,对应的字符是“啊”。
在区位码的区号和位号上分别加上0xA0就得到了GB2312编码。
区位码中01-09区是符号、数字区,16-87区是汉字区,10-15和88-94是未定义的空白区。
它将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。
一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。
GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。
可以用繁体汉字测试某些系统是不是只支持GB2312编码。
GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。
EUC-CN可以理解为GB2312的别名,和GB2312完全相同。
区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。
HZ和ISO- 2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。
汉字编码字符集

汉字编码字符集汉字编码字符集是指用于表示和存储汉字的一套编码系统。
在计算机领域,为了能够准确地表示和处理汉字,人们设计了多种不同的汉字编码字符集。
本文将介绍几种常见的汉字编码字符集,包括GB2312、GBK、Unicode以及UTF-8。
一、GB2312GB2312是中国国家标准局于1980年发布的一种汉字编码字符集,是最早被广泛使用的汉字字符集之一。
GB2312字符集包含了7445个汉字和682个非汉字字符,采用双字节表示每个字符。
其中,第一个字节的范围是0xB0至0xF7,第二个字节的范围是0xA1至0xFE。
GB2312字符集主要适用于简体中文。
二、GBK随着计算机技术的发展和汉字数量的增加,GB2312字符集的容量已经无法满足需求。
为了解决这个问题,国家标准局于1995年发布了GBK字符集,它是对GB2312字符集的扩充和改进。
GBK字符集兼容GB2312字符集,同时加入了21003个汉字,总计包含了21886个汉字。
GBK字符集同样采用双字节表示每个字符,第一个字节的范围是0x81至0xFE,第二个字节的范围是0x40至0xFE。
GBK字符集支持简体中文和繁体中文。
三、UnicodeUnicode是一种国际标准字符集,旨在为全球所有字符提供唯一的编码。
Unicode采用16位的编码方案,可以支持最多65536个不同的字符。
不仅包括了各个国家语言的文字,还包括了数学符号、技术符号、图形符号等。
Unicode字符集为各种语言的文字提供了一个统一的编码标准。
四、UTF-8UTF-8是一种可变长度的Unicode编码方案,更好地解决了存储效率和兼容性的问题。
UTF-8使用1至4个字节来表示一个字符,根据不同的字符而变化。
对于单字节的字符,编码和ASCII码相同,兼容ASCII码。
对于多字节的字符,第一个字节的高位标识了字节数。
UTF-8字符集可以表示Unicode字符集中的所有字符。
在计算机系统中,为了使不同的系统能够正确地处理汉字编码,一般需要统一选择一种字符集来使用。
字符编码和字符集到底有什么区别?Unicode和UTF-8是什么关系?

字符编码和字符集到底有什么区别?Unicode和UTF-8是什么关系?前⾔想必⼤家编写代码时肯定和我⼀样,也遇到过汉字乱码的问题。
特别是,有时候和上下游对接接⼝,不能统⼀编码格式的话,⼀堆乱码问题,让⼈头⽪发⿇。
那么为什么会有这么多的乱码问题?什么是字符编码?什么是字符集?他们之间有什么区别和联系?什么是 Unicode ? Unicode 和我们常说的 UTF-8 ⼜有什么关系?字符编码和解码要想搞清楚上⾯的问题,⾸先我们要知道,在计算机中,不管是⼀段⽂字、⼀张图⽚还是⼀段视频,最终都是以⼆进制的⽅式来存储。
也就是最终都会转化为0001 1011 0010 0110这样的格式。
换句话说,计算机只认识 0 和 1 这样的数字,并不能直接存储字符。
所以我们需要告诉它什么样的字符对应的是什么数字。
例如,我们的业务中有记录客户端的客户⾏为⽇志,然后导出⽂件来分析,字段间会以ESC来分隔。
我在编写代码的时候,就需要定义⼀下这个ESC字符应该对应什么数字,这样计算机才能识别并存储。
⽐如我把它定为0001 1011,这样计算机就把ESC这个字符存了下来。
等我下次需要查看的时候,根据对应关系把它解出来就可以了。
上边的两个过程就对应字符的编码和解码过程。
字符编码就是把字符按⼀定的规则,转换成数字。
字符解码是编码的逆过程,即把数字按规则转换成字符。
这样看来,貌似没有什么问题。
但是,这是我⾃⼰定义的编码规则,我同桌阿霄就不乐意了。
他⾮要认为ESC应该定义为1101 1000,好家伙正好和我定义的⼆进制数字顺序相反。
那结果肯定不⽤说了,我把0001 1011这串数字给他之后,按照他的编码规则来解,肯定是&$#!这样的东西。
所以,乱码问题说到底,就是编码和解码的规则对应不上导致的。
ASCII 码为了避免我和阿霄因为编码问题打起来,美国国家标准学会(AMERICAN NATIONAL STANDARDS INSTITUTE) ANSI 组织发话了。
数据库字符集编码和表字符集编码

数据库字符集编码和表字符集编码数据库字符集编码和表字符集编码是数据库中非常重要的概念,它们决定了数据库中存储的数据的字符编码方式。
正确设置字符集编码可以确保数据的正确存储和显示,避免出现乱码等问题。
数据库字符集编码是指数据库服务器使用的字符编码方式,它决定了数据库中所有表的默认字符集编码。
常见的数据库字符集编码有UTF-8、GBK、GB2312等。
UTF-8是一种通用的字符编码方式,支持全球范围内的字符,是目前最常用的字符集编码方式。
GBK和GB2312是中文字符集编码方式,适用于中文环境。
表字符集编码是指每个表在数据库中的字符编码方式,它可以与数据库字符集编码不同。
在创建表时,可以指定表的字符集编码,也可以使用数据库的默认字符集编码。
如果表的字符集编码与数据库的字符集编码不一致,那么在存储和显示数据时就需要进行字符集转换,这可能会导致性能下降和数据损坏。
正确设置数据库字符集编码和表字符集编码非常重要。
首先,它可以确保数据的正确存储和显示。
如果数据库字符集编码和表字符集编码不一致,那么在存储和显示数据时就可能出现乱码等问题,影响用户体验。
其次,它可以提高数据库的性能。
如果数据库字符集编码和表字符集编码一致,那么在存储和显示数据时就不需要进行字符集转换,可以提高数据库的性能。
在设置数据库字符集编码和表字符集编码时,需要考虑以下几个因素。
首先,需要考虑数据库的使用环境。
如果数据库主要用于存储中文数据,那么可以选择中文字符集编码,如GBK或GB2312。
如果数据库需要支持全球范围内的字符,那么可以选择UTF-8字符集编码。
其次,需要考虑数据库的性能和存储空间。
不同的字符集编码对存储空间的占用和性能有不同的影响。
一般来说,UTF-8字符集编码占用的存储空间较大,但支持更多的字符,而GBK和GB2312字符集编码占用的存储空间较小,但只支持中文字符。
最后,需要考虑与其他系统的兼容性。
如果数据库需要与其他系统进行数据交换,那么需要确保数据库字符集编码和表字符集编码与其他系统兼容。
常用字符集编码详解:ASCII、GB2312、GBK、GB18030、...

ASCIIASCII 码是7位编码,编码范围是0x00-0x7F ASCII 字符集包括英文字母、 阿拉伯数字和标点符号等字符。
其中 0x00-0x20和0x7F 共33个控制字符。
只支持ASCI 码的系统会忽略每个字节的最高位,只认为低 7位是有效位。
HZ 字符编码就是早期为了在只支持 7位ASCII 系统中传输中文而设计的编码。
早期很多邮件系统也只支持ASCII 编码,为了传输中文邮件必须使用 BASE64或 者其他编码方式。
GB2312GB2312是基于区位码设计的,区位码把编码表分为 94个位,每个字符的区号和位号组合起来就是该汉字的区位码。
10进制数来表示,如 1601就表示 16区1 位,对应的字符是 区号和位号上分别加上0xA0就得到了 GB2312编码。
区位码中 01-09区是符号、数字区, 16-87区是汉字区,未定义的空白区。
它将收录的汉字分成两级:第一级是常用汉字计 3755 个,置于 16-55 区,按汉语拼音字母 /笔形顺序排 列;第二级汉字是次常用汉字计 3008 个,置于 56-87 区,按部首 /笔画顺序排 列。
一级汉字是按照拼音排序的,这个就可以得到某个拼音在一级汉字区位中 的范围,很多根据汉字可以得到拼音的程序就是根据这个原理编写的。
GB2312字符集中除常用简体汉字字符外还包括希腊字母、日文平假名及片 假名字母、俄语西里尔字母等字符,未收录繁体中文汉字和一些生僻字。
可以 用繁体汉字测试某些系统是不是只支持 GB2312编码。
GB2312的编码范围是0xA1-0x7E 去掉未定义的区域之后可以理解为实际 编码范围是 0xA1-0xF7FE 。
EUC-CN 可以理解为GB2312的别名,和GB2312完全相同。
区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而 94个区,每个区对应 区位码一般用 “啊”。
在区位码的10-15和 88-94是GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。
几种常见字符集与字符编码

⼏种常见字符集与字符编码字符集的概念 字符(Character)是各种⽂字和符号的总称,包括各国家⽂字、标点符号、图形符号、数字等。
⽽字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。
常⽤字符集 ASCII字符集、GB2312字符集、GBK字符集、 USC-3字符集、Unicode字符集等。
字符编码的概念 字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某⼀对象(例如:⽐特模式、⾃然数序列、8位组或者电脉冲),以便⽂本在计算机中存储和通过通信⽹络的传递。
常⽤字符编码 ASCII编码、GB2312编码、GBK编码、UFT-8编码等字符编码。
注意:不要把字符集和字符编码两者弄混淆。
虽然他们有些同名,⽐如ASCII有字符集也有ASCII的字符编码,他们是两个不同的概念。
下⾯我们详细讲解⼏种常⽤的字符集和字符编码1 ASCII字符集和ASCII编码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的⼀套电脑编码系统。
它主要⽤于显⽰现代英语,⽽其扩展版本EASCII则可以勉强显⽰其他西欧语⾔。
它是现今最通⽤的单字节编码系统(但是有被Unicode追上的迹象),并等同于国际标准ISO/IEC 646。
ASCII字符集:主要包括控制字符(回车键、退格、换⾏键等);可显⽰字符(英⽂⼤⼩写字符、阿拉伯数字和西⽂符号)。
ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。
使⽤7位(bits)表⽰⼀个字符,共128字符;但是7位编码的字符集只能⽀持128个字符,为了表⽰更多的欧洲常⽤字符对ASCII进⾏了扩展,ASCII扩展字符集使⽤8位(bits)表⽰⼀个字符,共256字符。
ASCII的最⼤缺点是只能显⽰26个基本拉丁字母、阿拉伯数⽬字和英式标点符号,因此只能⽤于显⽰现代美国英语(⽽且在处理英语当中的外来词如naïve、café、élite等等时,所有重⾳符号都不得不去掉,即使这样做会违反拼写规则)。
字符和汉字编码
字符和汉字编码一、字符集编码字符集编码是指将字符集中的字符转换为计算机可识别的二进制编码。
常见的字符集编码包括ASCII编码、GB2312编码、GBK编码、UTF-8编码等。
1. ASCII编码:ASCII编码是最常用的字符集编码,它包含了128个字符,每个字符用一个字节的二进制数表示。
2. GB2312编码:GB2312编码是中国大陆使用的字符集编码,它包含了6763个汉字和一些其他的字符。
3. GBK编码:GBK编码是中国大陆使用的扩展字符集编码,它包含了20902个汉字和一些其他的字符。
4. UTF-8编码:UTF-8编码是一种可变长度的字符集编码,它包含了几乎所有的语言字符,包括汉字。
二、汉字编码汉字编码是指将汉字转换为计算机可识别的二进制编码。
常见的汉字编码包括GB2312编码、GBK编码、UTF-8编码等。
1. GB2312编码:GB2312编码是中国大陆使用的汉字编码,它包含了6763个汉字。
2. GBK编码:GBK编码是中国大陆使用的扩展汉字编码,它包含了20902个汉字。
3. UTF-8编码:UTF-8编码是一种可变长度的汉字编码,它包含了几乎所有的语言字符,包括汉字。
三、字符和汉字的输入方法字符和汉字的输入方法包括键盘输入、手写输入、语音输入等。
1. 键盘输入:通过键盘输入字符和汉字,是最常用的输入方法。
2. 手写输入:通过手写输入汉字,通常需要使用专门的识别软件。
3. 语音输入:通过语音输入汉字,通常需要使用语音识别软件。
四、字体和字形的表示字体和字形的表示包括矢量字体和点阵字体。
矢量字体是一种数学描述的字体,可以无损放大;点阵字体是一种像素点的集合,放大后会出现失真。
五、编码标准编码标准是指制定字符集编码和汉字编码的规范和标准。
中国制定了《信息交换用汉字编码字符集》等标准,国际上制定了ISO/IEC 10646等标准。
六、字符和汉字的输出方法字符和汉字的输出方法包括屏幕输出、打印机输出、文件输出等。
字符串知识点总结
字符串知识点总结一、字符串的基本概念1.1 定义:字符串是由零个或多个字符组成的有序序列,可以使用单引号、双引号或三引号来表示。
例如:'hello'、"world"、'''welcome to the world'''。
1.2 字符集和编码:字符串中的字符由字符集组成,而字符集又按照特定的规则进行编码。
常见的字符集有ASCII、Unicode、UTF-8等,而编码方式有UTF-8、UTF-16、GBK等。
在不同的编码方式下,同一个字符所占的字节数是不同的。
1.3 不可变性:字符串是不可变的数据类型,一旦创建之后就不能修改。
如果需要修改原有的字符串,那么就需要创建一个新的字符串。
1.4 转义字符:在字符串中,通过使用反斜杠(\)加上特定的字符可以表示一些特殊的字符,如换行符(\n)、制表符(\t)、回车符(\r)等。
1.5 字符串的长度:通过len()函数可以获取字符串的长度,即字符串中字符的个数。
例如,len('hello')的结果是5。
二、字符串的常见操作2.1 字符串的拼接:可以使用加号(+)来将两个字符串连接起来,也可以使用join()方法来拼接多个字符串。
2.2 字符串的切片:可以使用索引和切片操作来获取字符串中的子串。
例如,s[1:3]表示从索引1到索引3之间的子串。
2.3 字符串的重复:可以使用乘号(*)来实现字符串的重复。
例如,'hello' * 3的结果是'hellohellohello'。
2.4 字符串的查找:可以使用in关键字或者find()、index()方法来查找字符串中是否包含某个子串。
2.5 字符串的替换:可以使用replace()方法来替换字符串中的指定子串。
2.6 字符串的分割:可以使用split()方法将字符串按照指定的分隔符进行分割。
汉字编码常用的字符集
汉字编码常用的字符集
1. GB2312,GB2312是中国国家标准简化汉字字符集,于1980年发布。
它包含了6763个常用汉字和682个非汉字字符,使用双字节编码,其中包括了简体中文的基本字符。
2. GBK,GBK是GB2312的扩展字符集,于1995年发布。
它兼容GB2312,并增加了近两万个汉字和符号。
GBK使用双字节编码,其中包括了简体中文的扩展字符。
3. GB18030,GB18030是中国国家标准的多字节字符集,于2000年发布。
它兼容GB2312和GBK,并增加了更多的汉字和字符,包括繁体中文和一些少数民族文字。
GB18030使用单字节、双字节和四字节编码。
4. Unicode,Unicode是国际标准字符集,旨在涵盖地球上所有的字符。
Unicode采用统一的编码方式,为每个字符分配唯一的编码值。
其中,汉字统一采用了CJK统一汉字扩展A(CJK Unified Ideographs Extension A)和CJK统一汉字扩展B(CJK Unified Ideographs Extension B)等多个扩展区。
5. UTF-8,UTF-8是一种可变长度的Unicode编码方式,它可以表示任意Unicode字符。
UTF-8使用1到4个字节来表示不同的字符,其中包括了汉字。
这些字符集在不同的环境下使用,常见的应用包括操作系统、编程语言、文本编辑器、网页浏览器等。
使用不同的字符集可以满足不同的需求,如支持不同语言的文字显示和输入。
Windows程序员必须知道的字符编码和字符集
Windows程序员必须知道的字符编码和字符集1. 字符编码 (Character encoding)在存储和传递⽂本过程中,为了使得所有电脑都能够正确的识别出⽂本内容,需要有⼀个统⼀的规则。
2. 字符集 (Character Set) )⼀般情况,⼀种编码⽅式对应⼀种字符集。
如 ASCII,对应 ASCII 字符集。
GBK 编码⽅式对应 GBK 字符集。
但是也有⼀种编码⽅式,多种字符集的,Unicode 字符集有多种编码⽅式,如 utf-8,utf-16 等。
3. ASCIIASCII(American Standard Code for Information Interchange,美国信息交换标准代码):使⽤ 7 个 Bit 表⽰,共 128 个字符,刚好占⽤了⼀个字节中的后 7 位,共包括33 个控制字符和 95 个可显⽰字符。
. 4. ANSIANSI (⼀种字符编码,此处不是表⽰美国国家标准学会的意思):ANSI 是为了让计算机⽀持更多的语⾔,⽽在 ASCII 的*础上的⼀种扩展字符编码。
在不同语⾔操作上,ANSI 都表⽰当前计算机默认的编码⽅式。
如在简体 Windows 操作下,ANSI 编码代表 GBK 编码;在繁体中⽂操作下,ANSI 编码代表 Big5 编码;在⽇⽂ Windows 操作系统中,ANSI 编码代表 Shift_JIS 编码;在英⽂操作系统下,ANSI 就是ASCII 编码。
. 5. MBCSMBCS(Multi-Byte Character Set),早在 1980 年,中国就提出了使⽤ GB2312 编码⽅式来描述汉字。
后来其他东亚国家也利⽤这种⽅式扩展 ASCII 编码字符集。
台湾地区 5 ⼤企业推出的繁体 Big5 码,⾹港新加坡等后来也利⽤。
⽇本韩国也相应推出了⾃⼰的编码⽅式。
其实在这⾥,BIG5 既是编码⽅式,也是字符集。
. 6. GB2312(Guo Biao 2312) )⽤双字节表⽰汉字,但是为了完全兼容 ASCII。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2Window & linux
windows操作系统locale
linux操作系统编码
Codepage 映射(936==gbk,)
an abstract list of more than one million characters found in a wide variety of scripts including Latin, Cyrillic, Chinese, Korean, Japanese, Hebrew, and Aramaic. Other symbols such as musical notation are also included in the character repertoire. Both the Unicode and GB18030 standards have a character repertoire. As new characters are added to one standard, the other standard also adds those characters, to maintain parity.
•
Code unit Size: The code unit size is equivalent to the bit measurement for the particular encoding:
– – – – A code unit in US-ASCII consists of 7 bits; A code unit in UTF-8, EBCDIC and GB18030 consists of 8 bits; 所以utf8字符长度为8个字节的n倍。 A code unit in UTF-16 consists of 16 bits; 所以utf16字符长度为16个字节的n倍。 A code unit in UTF-32 consists of 32 bits.
2、操作系统字符集解决方案
• 2.1、现代编码模型
– Bom – CEF
• 2.2、操作系统编码:windows , linux
– Linux 下的常用配置,命令
2.1现代编码模型
传输编码语法:(transfer encoding syntax),用于处理上一层次的字符编码方案提供的 字节序列。一般其功能包括两种:一是把字节序列的值映射到一套更受限制的值域内, 以满足传输环境的限制,例如Email传输时base64或quoted-printable,都是把8位的字节编 码为7位长的数据;另一是压缩字节序列的值如gzip , LZW等
字符编码方案(CES:Character Encoding Scheme),也称作"serialization format"。 将定长的整型值(即码元)映射到8位字节序列,以便编码后的数据的文件存储或网络传 输。在使用Unicode的场合,使用一个简单的字符来指定字节顺序是大端序或者小端序 (但对于UTF-8来说并不需要专门指明字节序) 字符编码表: (CEF: Character Encoding Form),也称为"storage format“. 是将编码字符集的非负整数值(即抽象的码位)转换成有限比特长度的整型值(称为码 元code units)的序列。 编码字符集 (CCS : Coded Character Set)是将字符集中每个字符映射到1个坐标 抽象字符表 (Abstract character repertoire)是一个系统支持的所有抽象字符的集合,更久远 的是硬件
1.1几个问题
• 1、java 中char 占用几个字节 • 2、Java中字符串
– “a”lenght – “a中” – “a中������” subString 会怎么样
• 3、如果网页传递的参数值中中文是gbk URL encoding 的,而我们系统 的http request 参数解析是utf8格式的如何处理。 • 4、哪些场景的字符编码格式转换,不会导致信息丢失。 • 5、为何标准的utf-8不需要bom,而utf16,utf32 必须。 • 6、内存中字符串出现什么样的乱码后,就不能反转回来了。 • 7、windows 记事本下联通,移动的故事, why • 8、表情符号,什么情况下需要处理吗? • 9、windows 上文本文件保存的unicode 格式,真实格式是什么 • 10、java 哦老系统,经常看到 property 文件上 \uxxxx 的字符,这些文 件是什么格式,为什么这么做?
简单字符集
•
• •
按照惯例,人们认为字符集和字符编码是同义词, 因为使用同样的标准来定 义提供什么字符并且这些字符如何编码到一系列的代码单元(通常一个字符 一个单元) 例如最初的ascii , iso8859 系列 iso8859-1 属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如, 字母'a'的编码为0x61=97。 很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由 于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使 用iso8859-1编码来表示。而且在很多协议上,默认使用该编码
字符集和编码
-- by jeffrey yang
• 1、乱码现象 • 2、操作系统字符集解决方案 • 3、unicode 介绍
– 17平面 – UTF8,UTF16,UTF32
• 4、其他编码方式
– Gb系列 – Base64 – URLEncode
• 5、其他
1乱码现象
• � \ufffd. bytes中超出了字符集显示范围,违反了编码规则 的。 对于没有包含�的编码格式的文件将无法保存文件。 例如gbk. • ?及3F 。1、在 Ancii中没有这个字符,那么就会编码成 3F, 2、unicode中没有对应unicode字符。 • [] 符合编码规则, 但是在系统的字符集中目前属于未分 配字符,或没有对应的字符。例如用在部分系统上utf 8显 示emoji. 仅仅是无法正常显示,可保存。 • 其他:鑵鑵, ¢Àï Èöµ©
code unit 的相关述语
• •
• • • •
A character is a minimal unit of text that has semantic value. A character set is a collection of characters that might be used by multiple languages. Example: The Latin character set is used by English and most European languages, though the Greek character set is used only by the Greek language. 以及unicode , gbk等 A coded character set is a character set, where each character is assigned with a unique number. A code point is a value that can be used in a coded character set. A code point is a 32-bitbits represent a valid code point value and the upper 11 bits are 0. A code unit is a bit sequence used to encode each single character unit of a repertoire within each encoding form. Character repertoire (the abstract list of characters)抽象字符集,我们平时表述的: The character repertoire is
2.1 serialization format 的实现BOM
• • • •
BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中 用于标识文件是采用哪种格式的编码。 Big Endian高字节在前,低字节在后 和Little Endian低字节在前,高字节在后 UTF8不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 “Zero Width No-Break Space” 的 UTF-8 编码是 EF BB BF。所以如果接收者收到以 EF BB BF 开头的字节 流,就知道这是 UTF-8编码了。Windows 就是使用 BOM 来标记文本文件的编码方式的 。 编码 表示(十六进制) 表示(十进制) UTF-8 UTF-16(大端序) EF BB BF FE FF 239 187 191 254 255
2.1字符编码表
storage format
• 这对于定长编码来说是个到自身的映射(null mapping),
•
但对于变长编码来说,该映射比较复杂,把一些码位映射到一个码元,把另外一些码 位映射到由多个码元组成的序列。例如,使用16比特长的存储单元保存数字信息,系 统每个单元只能够直接表示从0到65,535的数值,但是如果使用多个16位单元就能够表 示更大的整数。这就是CEF的作用,它可以把Unicode从0到140万的码空间范围的每个码 位映射到单个或多个在0到65,5356范围内的码值。最简单的字符编码表就是单纯地选择 足够大的单位,以保证编码字符集中的所有数值能够直接编码(一个码位对应一个码 值)。这对于能够用使用八比特组来表示的编码字符集(如多数传统的非CJK的字符集 编码)是合理的,对于能够使用十六比特来表示的编码字符集(如早期版本的Unicode )来说也足够合理。但是,随着编码字符集的大小增加(例如,现在的Unicode的字符 集至少需要21位才能全部表示),这种直接表示法变得越来越没有效率,并且很难让 现有计算机系统适应更大的码值。因此,许多新近版本Unicode的系统,或者将Unicode 码位对应为可变长度的8位字节序列的UTF-8,或可变长度的16位序列的UTF-16。.