字符与字符编码
常用的中文字符编码
常用的中文字符编码
常用的中文字符编码有以下几种:
1. GB2312:是中国国家标准简体中文字符集,共收录了6763个汉字。
GB2312是最早的汉字字符集,主要用于简体中文的编码。
2. GBK:是GB2312的扩展字符集,共收录了21886个汉字。
GBK 支持繁体中文字符和少数民族文字。
GBK是目前最常用的中文字符编码。
3. GB18030:是GB2312和GBK的升级版字符集,共收录了27533个汉字。
GB18030支持所有中国少数民族文字,并且还包含了Unicode
3.0的全部字符。
4. UTF-8:是一种以Unicode为基础的字符编码,采用可变长度的编码方式,支持全球范围内几乎所有的字符。
UTF-8是互联网上最常用的字符编码,也是目前推荐使用的中文字符编码。
除了上述字符编码,还有一些其他的字符编码,如Big5(主要用于繁体中文)、ISO-8859-1(用于西欧字符集)等,但在日常使用中较少见。
字符编码和字符集到底有什么区别?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 组织发话了。
字符和汉字编码
字符和汉字编码一、字符集编码字符集编码是指将字符集中的字符转换为计算机可识别的二进制编码。
常见的字符集编码包括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等标准。
六、字符和汉字的输出方法字符和汉字的输出方法包括屏幕输出、打印机输出、文件输出等。
C语言中的字符串与字符集详解
C语⾔中的字符串与字符集详解字符集理论及应⽤详解⼀、字符集和字符编码1、定义字符集(Character Set/Charset)是⼀个系统⽀持的所有抽象字符的集合。
字符是各种⽂字和符号的总称,包括各国家⽂字、标点符号、图形符号、数字等。
简单来说,字符集就是⼀个表。
这个表有两列,⼀列是各种字符,另⼀列是每个字符锁对应的编号。
注意,字符集只是⼀个规则,或者说是标准。
它只定义每个字符对应的编对应关系,⽽不存储每个字符的图像。
存储字符图像的是字体⽂件。
可以这样理解:字码,建⽴字符和数字的对应关系体⽂件中存了很多张图⽚,每⼀张图⽚都是⼀个字符的样⼦,同时每个图⽚都有⾃⼰的名字(可能不⽌⼀个),这个名字就是图⽚中的字符在字符集中的编码。
图⽚可以看作是字体⽂件中的⼀个字符,名字可以看作是其对应的编码(这⾥是Unicode字符集指定的编码)字符编码(Character Encoding)是⼀套法则,使⽤该法则能够对⾃然语⾔的字符的⼀个集合(如字母表或⾳节表),与其他东西的⼀个集合(如号码或电脉冲)进⾏配对。
即在符号集合与数字系统之间建⽴对应关系,它是信息处理的⼀项基本技术。
通常⼈们⽤符号集合(⼀般情况下就是⽂字)来表达信息。
⽽以计算机为基础的信息处理系统则是利⽤元件(硬件)不同状态的组合来存储和处理信息的。
元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。
简单来说,字符编码就是表⽰字符的⽅法。
例如,如何将字符集中字符⾃⼰的编号存在计算机中。
2、常见字符集常见字符集有两⼤类,分别是ANSI和Unicode。
其中ANSI⼜包含了很多具体的字符集,例如GB2312,BIG5,Shift-JIS等。
ANSI字符集:ANSI编码包含了⼀系列字符集,所以准确来讲,它并不能被叫做⼀个字符集。
但是由于技术原因(下⾯会讲),这⼀系列字符集同时只能使⽤⼀个,所以把整个ANSI编码称作ANSI字符集来讨论也没有什么⼤问题。
256 257 258字符编码
256 257 258字符编码一、什么是字符编码字符编码是计算机技术中的一个重要概念,它指的是将字符转换为计算机能够识别和处理的数据形式的过程。
计算机内部只能识别和处理数字,而字符编码就是将字符映射为对应的数字或者二进制形式,以便计算机能够正确地处理和显示文本信息。
二、常见的字符编码方案在计算机领域,常见的字符编码方案有ASCII、Unicode和UTF-8等。
这些字符编码方案分别具有不同的特点和适用范围。
1. ASCII编码ASCII编码是最早的字符编码方案,它规定了128个字符的编码,包括英文字母、数字和一些特殊字符。
由于ASCII编码只能表示128个字符,无法满足其他语种的需要,因此逐渐被Unicode和UTF-8所取代。
2. Unicode编码Unicode编码是一种全球通用的字符编码方案,它包含了世界上几乎所有的文字字符,可以表示多种语言的文字。
Unicode编码使用16位或32位来表示字符,能够满足不同语种的需求,是目前最为广泛应用的字符编码方案之一。
3. UTF-8编码UTF-8是一种可变长度的Unicode编码方案,它可以使用1~4个字节来表示一个字符,适合在互联网上传输和存储文本信息。
由于UTF-8编码具有良好的兼容性和节省空间的特点,因此在互联网应用中得到了广泛的应用。
三、字符编码的重要性字符编码在计算机领域具有非常重要的作用,它直接影响着计算机能否正确地显示和处理文本信息。
正确的字符编码方案可以保证不同语言的文字能够被准确地表达和显示,从而实现跨语言的信息交流和共享。
1. 多语言支持随着全球化的发展,不同国家和地区之间的交流日益频繁,多语言支持成为了计算机系统的基本需求。
而正确的字符编码方案可以实现在同一个系统中支持多种语言的显示和输入,为用户提供更加便捷的操作体验。
2. 数据传输在网络通信和数据传输过程中,字符编码的选择直接影响着数据的准确传输和解析。
采用合适的字符编码方案可以有效地避免因编码问题造成的数据丢失和信息不清晰的情况,保证数据的完整性和可靠性。
字符集和字符编码(CharsetEncoding)
字符集和字符编码(CharsetEncoding)——每个软件开发⼈员应该⽆条件掌握的知识!——Unicode伟⼤的创想!相信⼤家⼀定碰到过,打开某个⽹页,却显⽰⼀堆像乱码,如"бЇЯАзЪСЯ"、"�????????"?还记得HTTP中的Accept-Charset、Accept-Encoding、Accept-Language、Content-Encoding、Content-Language等消息头字段?这些就是接下来我们要探讨的。
⽬录:1.*础知识计算机中储存的信息都是⽤⼆进制数表⽰的;⽽我们在屏幕上看到的英⽂、汉字等字符是⼆进制数转换之后的结果。
通俗的说,按照何种规则将字符存储在计算机中,如'a'⽤什么表⽰,称为"编码";反之,将存储在计算机中的⼆进制数解析显⽰出来,称为"解码",如同密码学中的加密和解密。
在解码过程中,如果使⽤了错误的解码规则,则导致'a'解析成'b'或者乱码。
字符集(Charset):是⼀个系统⽀持的所有抽象字符的集合。
字符是各种⽂字和符号的总称,包括各国家⽂字、标点符号、图形符号、数字等。
字符编码(Character Encoding):是⼀套法则,使⽤该法则能够对⾃然语⾔的字符的⼀个集合(如字母表或⾳节表),与其他东西的⼀个集合(如号码或电脉冲)进⾏配对。
即在符号集合与数字系统之间建⽴对应关系,它是信息处理的⼀项*本技术。
通常⼈们⽤符号集合(⼀般情况下就是⽂字)来表达信息。
⽽以计算机为*础的信息处理系统则是利⽤元件(硬件)不同状态的组合来存储和处理信息的。
元件不同状态的组合能代表数字系统的数字,因此字符编码就是将符号转换为计算机可以接受的数字系统的数,称为数字代码。
2.常⽤字符集和字符编码常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。
常用字符编码
常用字符编码
ASCII码是一种7位编码,共可以表示128个字符,包括大写字母、小写字母、数字、标点符号和一些特殊字符。
因为只有7位,所以ASCII码的字符集非常有限,只能表示英文字符,无法表示其他国家的文字。
Unicode码是一种全球通用的编码方式,共可以表示超过120万个字符,包括中文汉字、日文汉字、韩文汉字、拉丁文字符等。
Unicode 码采用32位编码,所以可以表示更多的字符。
UTF-8码是Unicode码的一种实现方式,它采用可变长度编码,可以根据字符的不同采用1至4个字节进行编码。
这种编码方式既能表示ASCII码的字符,又能表示Unicode码的字符,是目前最常用的字符编码方式之一。
在使用字符编码时需要注意一些问题,比如在不同的编码方式下,相同的字符可能会被编码成不同的二进制位,导致出现乱码等问题。
此外,在进行数据传输或存储时,也需要选择适合的字符编码方式,以确保数据的正确性和可读性。
- 1 -。
哈夫曼编码 字符与编码对照表
哈夫曼编码(Huffman Coding)是一种用于无损数据压缩的熵编码算法。
它根据字符在文本中出现的频率来构建一棵哈夫曼树,然后用这棵树为每个字符生成一个唯一的二进制编码。
这些编码的长度是根据字符的频率动态生成的,频率越高的字符,其编码长度越短,从而达到压缩数据的目的。
哈夫曼编码的一个特点是,它生成的编码并不是唯一的。
也就是说,对于同一个文本,不同的哈夫曼编码算法可能会生成不同的编码结果。
这是因为哈夫曼树的构建过程可能受到多种因素的影响,比如字符频率的统计方式、树的构建算法等。
因此,要提供一个具体的字符与编码对照表,我们需要先明确字符的频率以及哈夫曼树的构建过程。
下面是一个简单的示例,假设我们有以下字符及其频率:
基于这些频率,我们可以构建一个哈夫曼树,并为每个字符生成一个唯一的二进制编码。
假设我们得到的编码如下:
请注意,这只是一个示例,实际的哈夫曼编码可能会因为字符频率和哈夫曼树构建算法的不同而有所差异。
计算机中的字符编码
计算机中的字符编码0. 字符与编码的发展 (1)0.1 字符,字节,字符串 (2)0.2字符集与编码 (3)1. ASCII码 (4)2. 非ASCII编码 (5)3. Unicode (5)3.1 Unicode的问题 (5)4.UTF-8 (6)4.1 Unicode与UTF-8之间的转换 (6)4.2 Little endian和Big endian (7)4.3 实例 (8)4.4 关于BOM (8)5. GB2312 (9)0. 字符与编码的发展从计算机对多国语言的支持角度看,大致可以分为三个阶段:字符串在内存中的存放方法:在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。
比如,"Bob123" 在内存中为:42 6F 62 31 32 33 00B o b 1 2 3 \0在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符。
比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:D6 D0 CE C4 31 32 33 00中文 1 2 3 \0在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。
目前计算机一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。
比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:2D 4E 87 65 31 00 32 00 33 00 00 00 ←在 x86 CPU 中,低字节在前中文 1 2 3 \0一共占 10 个字节。
0.1 字符,字节,字符串理解编码的关键,是要把字符的概念和字节的概念理解准确。
关于网页乱码和字符编码方式
关于⽹页乱码和字符编码⽅式⽹页出现乱码的原因⼀般是因为字符的编码⽅式不同。
字符编码是计算机技术的基础,对于计算机来说,所有的信息都是0或者1的⼆进制序列,计算机是⽆法直接识别和存储字符的,所以,字符必须经过编码才能被计算机处理。
⼀、两个概念:字符集和字符编码字符集:直观上来讲就是⼈们统计预先规定好的⼀系列字符与⼆进制序列(数字)之间的映射关系。
⽐较常⽤字符集有ASCII、GBK、Unicode等。
但是当我们规定好了字符与数字之间的对应关系,但这并不代表计算机⼀定要按照字符对应的数字将数字本⾝直接存储,所以,我们需要设定⼀种规则,将这些字符的码元再次处理,使之更加适应计算机存储、⽹络传输的需要。
字符编码,就是规定了如何编码、存储这些字符对应的⼆进制序列。
所以,字符集是⼀种协议,⽽字符编码就是对字符集更好实现的⼀种规则,所以,⼀种字符集就有了不同的编码⽅式。
⼆、常见的编码⽅式:Unicode、ASCII、GBK、GB2312、UTF-8三、关于ASCII码这是美国在19世纪60年代的时候为了建⽴英⽂字符和⼆进制的关系时制定的编码规范,它能表⽰128个字符,其中包括英⽂字符、阿拉伯数字、西⽂字符以及32个控制字符。
它⽤⼀个字节来表⽰具体的字符,但它只⽤后7位来表⽰字符(2^7=128),最前⾯的⼀位统⼀规定为0。
四、扩展的ASCII码原本的ASCII码对于英⽂语⾔的国家是够⽤了,但是欧洲国家的⼀些语⾔会有拼⾳,这时7个字节就不够⽤了。
因此⼀些欧洲国家就决定,利⽤字节中闲置的最⾼位编⼊新的符号。
⽐如,法语中的é的编码为130(⼆进制10000010)。
这样⼀来,这些欧洲国家使⽤的编码体系,可以表⽰最多256个符号。
但这时问题也出现了:不同的国家有不同的字母,因此,哪怕它们都使⽤256个符号的编码⽅式,代表的字母却不⼀样。
⽐如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中⼜会代表另⼀个符号。
字符编码
GB2312
GB2312也是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉 字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。其中最有影响 的是于1980年发布的《信息交换用汉字编码字符集基本集》,标准号为GB 2312-1980,因其使用非常普遍,也常 被通称为国标码。GB2312编码通行于我国内地;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件 都支持GB 2312。
UTF-8的编码是这样得出来的,以”汉”这个字为例:
“汉”字的Unicode编码是U+00006C49,然后把U+00006C49通过UTF-8编码器进行编码,最后输出的UTF-8 编码是E6B189。
Base64
Base64编码有的电子邮件系统(比如国外信箱)不支持非英文字母(比如汉字)传输,这是历史原因造成的(认 为只有美国会使用电子邮件?)。因为一个英文字母使用ASCII编码来存储,占存储器的1个字节(8位),实际上只 用了7位2进制来存储,第一位并没有使用,设置为0,所以,这样的系统认为凡是第一位是1的字节都是错误的。 而有的编码方案(比如GB2312)不但使用多个字节编码一个字符,并且第一位经常是1,于是邮件系统就把1换成0, 这样收到邮件的人就会发现邮件乱码。
ASCII码使用7位2进制数表示一个字符,7位2进制数可以表示出2的7次方个字符,共128个字符。EBCDIC码 使用8位,可以表示出2的8次方个字符,256个字符。
字符集和字符编码格式有什么区别和作用?
字符集和字符编码格式有什么区别和作用?导读:字符集和字符编码格式有什么区别和作用?为什么码好的代码在别人的电脑上运行会出现乱码?其实主要问题在于计算机存储介质中存放的二进制比特流。
如果字符集和字符编码两者之间的转换规则不统一标准,就会乱码现象。
字符集和字符编码格式有什么区别和作用?在介绍字符集之前,我们先了解下为什么要有字符集。
我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流。
那么在这两者之间的转换规则就需要一个统一的标准,否则把我们的U盘插到别的电脑上,文档就乱码了;小伙伴QQ上传过来的文件,在我们本地打开又乱码了。
什么是字符集?在介绍字符集之前,我们先了解下为什么要有字符集。
我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流。
那么在这两者之间的转换规则就需要一个统一的标准,否则把我们的U盘插到老板的电脑上,文档就乱码了;小伙伴QQ上传过来的文件,在我们本地打开又乱码了。
于是为了实现转换标准,各种字符集标准就出现了。
简单的说字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。
那么为什么会有那么多字符集标准呢?这个问题实际非常容易回答。
问问自己为什么我们的插头拿到英国就不能用了呢?为什么显示器同时有DVI,VGA,HDMI,DP这么多接口呢?很多规范和标准在最初制定时并不会意识到这将会是以后全球普适的准则,或者处于组织本身利益就想从本质上区别于现有标准。
于是,就产生了那么多具有相同效果但又不相互兼容的标准了。
说了那么多我们来看一个实际例子,下面就是屌这个字在各种编码下的十六进制和二进制编码结果,怎么样有没有一种很屌的感觉?什么是字符编码?字符集只是一个规则集合的名字,对应到真实生活中,字符集就是对某种语言的称呼。
例如:英语,汉语,日语。
对于一个字符集来说要正确编码转码一个字符需要三个关键元素:字库表(character repertoire)、编码字符集(coded character set)、字符编码(character encoding form)。
字符汉字的编码
例:二进制数(1101.01)2各数位的权值
1101.01
20 21
22 23
2-2 2-1
二进制转换为十进制
按权相加
例:把二进制数(10010)2表示成十进制数是多少?
1 0 0 1 0 =1×24+0×23+0×22+1×21+0×20
20
21
24
Байду номын сангаас22
23
=16+0+0+2+0 =18
十进制转换为二进制(一)
整数部分除2取余
例:(28)10=(1 1 1 0 0)2
2 28 ……0 2 14 ……0 2 7 ……1 2 3 ……1
1
十进制转换为二进制(二)
小数部分乘2取整
例:(0.75)10=(
)2
积
整数
0.75×2=1. 5 .......... 1 最高位
0. 5×2=1.0 .......... 1
小结
1、计算机只能识别二进制数。 2、常用的字符编码为ASCII码;一个字符占8 bit;
汉字编码为GB码;一个汉字用2个字节(B)表示。
规模适当、作用突出的党员队伍。
二、目标要求 按照市委组织部“631”
工程的发展计划,结合我镇实际,今 年拟发 展党员7 5名。 其中,3 5周岁 以下的 要
占80%以上,高中以上文化程度的要 占80% 以上;妇 女要占2 5%
练习
1、拼音输入法与五笔输入法所生成的汉字机内码一样吗? 2、存储英文“To Be Or Not To Be”需要几个字节? 3、存储“生存还是死亡”6个汉字需要几个字节?
显示字节数计算方法:点阵数的平方/8
Python的字符串和编码
Python的字符串和编码1. 字符编码 字符串也是⼀种数据类型,但是,字符串⽐较特殊的是还有⼀个编码问题。
因为计算机只能处理数字,如果要处理⽂本,就必须先把⽂本转换为数字才能处理。
最早的计算机在设计时采⽤8个⽐特(bit)作为⼀个字节(byte),所以,⼀个字节能表⽰的最⼤的整数就是255(⼆进制11111111=⼗进制255),如果要表⽰更⼤的整数,就必须⽤更多的字节。
⽐如两个字节可以表⽰的最⼤整数是65535,4个字节可以表⽰的最⼤整数是4294967295。
由于计算机是美国⼈发明的,因此,最早只有127个字符被编码到计算机⾥,也就是⼤⼩写英⽂字母、数字和⼀些符号,这个编码表被称为ASCII编码,⽐如⼤写字母A的编码是65,⼩写字母z的编码是122。
但是要处理中⽂显然⼀个字节是不够的,⾄少需要两个字节,⽽且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,⽤来把中⽂编进去。
你可以想得到的是,全世界有上百种语⾔,⽇本把⽇⽂编到Shift_JIS⾥,韩国把韩⽂编到Euc-kr⾥,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语⾔混合的⽂本中,显⽰出来会有乱码。
因此,Unicode字符集应运⽽⽣。
Unicode把所有语⾔都统⼀到⼀套编码⾥,这样就不会再有乱码问题了。
Unicode标准也在不断发展,但最常⽤的是UCS-16编码,⽤两个字节表⽰⼀个字符(如果要⽤到⾮常偏僻的字符,就需要4个字节)。
现代操作系统和⼤多数编程语⾔都直接⽀持Unicode。
现在,捋⼀捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,⽽Unicode编码通常是2个字节。
字母A⽤ASCII编码是⼗进制的65,⼆进制的01000001; 字符0⽤ASCII编码是⼗进制的48,⼆进制的00110000,注意字符'0'和整数0是不同的; 汉字中已经超出了ASCII编码的范围,⽤Unicode编码是⼗进制的20013,⼆进制的0100111000101101。
编程语言中的字符集与字符编码的关系
编程语言中的字符集与字符编码的关系在计算机编程中,字符集和字符编码是两个非常重要的概念。
字符集是指一组字符的集合,而字符编码则是将这些字符映射到计算机内部表示的数字的规则。
字符集和字符编码之间的关系密切,理解它们之间的关系对于编程工程师来说至关重要。
一、字符集的定义与作用字符集是指一组字符的集合,可以包含字母、数字、标点符号、特殊字符等。
常见的字符集包括ASCII、Unicode等。
ASCII字符集是最早的字符集之一,它包含了128个字符,包括英文字母、数字和一些常用的符号。
ASCII字符集使用7位二进制数表示一个字符,因此最多可以表示128个字符。
随着计算机的普及和发展,ASCII字符集已经不能满足所有语言的需求。
为了解决这个问题,Unicode字符集应运而生。
Unicode字符集是一种全球字符集,它包含了几乎所有语言的字符。
Unicode字符集使用32位二进制数表示一个字符,因此最多可以表示4294967296个字符。
二、字符编码的定义与作用字符编码是将字符映射到计算机内部表示的数字的规则。
计算机内部只能处理二进制数据,因此需要将字符转换为二进制表示。
常见的字符编码包括ASCII编码、UTF-8编码等。
ASCII编码是最早的字符编码之一,它将字符映射到一个7位的二进制数。
由于ASCII编码只能表示128个字符,无法满足所有语言的需求。
为了解决这个问题,出现了扩展的ASCII编码,如ISO-8859系列。
这些编码使用8位二进制数表示一个字符,可以表示更多的字符。
然而,随着Unicode字符集的出现,为了节省存储空间和传输带宽,出现了一种变长的字符编码,即UTF-8编码。
UTF-8编码根据字符的不同,使用1到4个字节表示一个字符。
对于ASCII字符,UTF-8编码与ASCII编码完全兼容,只使用一个字节表示;对于非ASCII字符,UTF-8编码使用多个字节表示。
三、字符集与字符编码的关系字符集和字符编码是密不可分的。
ASCII字符与编码对照表
0x1 鼠标左键0x2 鼠标右键0x3 CANCEL 键0x4 鼠标中键0x8 BACKSPACE 键0x9 TAB 键0xC CLEAR 键0xD ENTER 键0x10 SHIFT 键0x11 CTRL 键0x12 MENU 键0x13 PAUSE 键0x14 CAPS LOCK 键0x1B ESC 键0x20 SPACEBAR 键0x21 PAGE UP 键0x22 PAGE DOWN 键0x23 END 键0x24 HOME 键0x25 LEFT ARROW 键0x26 UP ARROW 键0x27 RIGHT ARROW 键0x28 DOWN ARROW 键0x29 SELECT 键0x2A PRINT SCREEN 键0x2B EXECUTE 键0x2C SNAPSHOT 键0x2D INSERT 键0x2E DELETE 键0x2F HELP 键0x90 NUM LOCK 键A 至Z 键与 A – Z 字母的ASCII 码相同:值描述65 A 键66 B 键67 C 键69 E 键70 F 键71 G 键72 H 键73 I 键74 J 键75 K 键76 L 键77 M 键78 N 键79 O 键80 P 键81 Q 键82 R 键83 S 键84 T 键85 U 键86 V 键88 X 键89 Y 键90 Z 键97 a98 b99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w120 x121 y122 z0 至9 键与数字0 – 9 的ASCII 码相同:值描述48 0 键49 1 键50 2 键51 3 键52 4 键53 5 键54 6 键55 7 键56 8 键57 9 键下列常数代表数字键盘上的键:值描述0x60 0 键0x62 2 键0x63 3 键0x64 4 键0x65 5 键0x66 6 键0x67 7 键0x68 8 键0x69 9 键0x6A MULTIPLICATION SIGN (*) 键0x6B PLUS SIGN (+) 键0x6C ENTER 键0x6D MINUS SIGN (–) 键0x6E DECIMAL POINT (.) 键0x6F DIVISION SIGN (/) 键下列常数代表功能键:值描述0x70 F1 键0x72 F3 键0x73 F4 键0x74 F5 键0x75 F6 键0x76 F7 键0x77 F8 键0x78 F9 键0x79 F10 键0x7A F11 键0x7B F12 键0x7C F13 键0x7D F14 键0x7E F15 键0x7F F16 键。
最常用的字母与字符的编码
最常用的字母与字符的编码介绍在计算机科学和信息技术领域,字符编码是将字符映射到数字的过程。
最常用的字符编码是ASCII码(American Standard Code for Information Interchange),它使用7位二进制数表示128个字符,包括大写和小写字母、数字、标点符号和一些控制字符。
然而,随着计算机的发展和国际化的需求,ASCII码已经不足以满足各种语言和特殊字符的编码需求。
因此,出现了更多的字符编码标准,如Unicode和UTF-8。
ASCII码ASCII码是最早的字符编码标准,它于1963年被制定,并在计算机领域广泛使用。
ASCII码使用7位二进制数(0-127)表示128个字符,其中包括了大写和小写字母、数字、标点符号和一些控制字符。
例如,字符’A’的ASCII码是65,字符’a’的ASCII码是97。
ASCII码的编码范围非常有限,只能表示英文字符和一些常用的符号,对于其他语言和特殊字符的编码无法满足需求。
UnicodeUnicode是一种更为全面的字符编码标准,它包含了世界上几乎所有的字符,无论是字母、数字、标点符号,还是各种语言和特殊字符。
Unicode使用32位二进制数表示字符,可以表示超过100万个字符。
Unicode的编码范围非常广泛,可以满足各种语言和特殊字符的需求。
例如,字符’中’的Unicode编码是20013,字符’?’的Unicode编码是128522。
UTF-8UTF-8是Unicode的一种变长字符编码方式,它可以使用1至4个字节表示一个字符,根据字符的不同而变化。
UTF-8编码可以兼容ASCII码,即ASCII码中的字符仍然使用1个字节表示,而非ASCII码的字符则使用2至4个字节表示。
UTF-8编码在互联网上广泛使用,它可以表示几乎所有的字符,同时兼顾了存储空间和传输效率。
最常用的字母编码在英文文本中,有一些字母出现的频率比其他字母更高。
计算机字符编码
计算机字符编码⼀、有关编码的基础知识 1、计算机中存储单位位 bit 最⼩的单元字节 byte 机器语⾔的单位 1byte=8bits1KB = 1024byte2MB = 1024KB1GB = 1024MB 2、进制⼆进制 binary⼋进制 octal⼗进制 decimal⼗六进制 hex 3、⼏个概念 (1)字符:是各种⽂字和符号的总称,包括各个国家的⽂字,标点符号,图形符号,数字等; (2)字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。
(3)字符编码:字符集只是规定了有哪些字符,⽽最终决定采⽤哪些字符,每⼀个字符⽤多少字节表⽰等问题,则是由编码来决定的。
计算机要准确的处理各种字符集⽂字,需要进⾏字符编码,以便计算机能够识别和存储各种⽂字。
⼆、字符编码的介绍⾸先来看⼀下常⽤的编码有哪些,截图⾃Notepad++。
其中ANSI在中国⼤陆即为GBK(以前是GB2312),最常⽤的是 GBK 和 UTF8⽆BOM 编码格式。
后⾯三个都是有BOM头的⽂本格式,UCS-2即为⼈们常说的Unicode编码,⼜分为⼤端、⼩端。
所谓BOM头(Byte Order Mark)就是⽂本⽂件中开始的⼏个并不表⽰任何字符的字节,⽤⼆进制编辑器(如bz.exe)就能看到了。
UTF8的BOM头为 0xEF 0xBB 0xBFUnicode⼤端模式为 0xFE 0xFFUnicode⼩端模式为 0xFF 0xFE 如图: ⼆、编码表的由来 计算机只能识别⼆进制数据,早期由来是电信号。
为了⽅便应⽤计算机,让它可以识别各个国家的⽂字。
就将各个国家的⽂字⽤数字来表⽰,并⼀⼀对应,形成⼀张表。
这就是编码表。
⼆、ASCII码 计算机⼀开始发明的时候是⽤来解决数字计算的问题,后来⼈们发现,计算机还可以做更多的事,例如⽂本处理。
但由于计算机只识“数”,因此⼈们必须告诉计算机哪个数字来代表哪个特定字符,例如65代表字母‘A’,66代表字母‘B’,以此类推。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Outline
1.字符与编码的发展 2.字符,字节,字符串 3.字符集与编码 4.常用字符集介绍 5. MIME邮件的编码方式
2
1 字符与编码的发展
阶段一 说明 系统 计算机刚开始只支持英语,其它语言不能够在计算机上存储和 ASCII 显示。 英文 DOS 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统 ANSI编码 中,使用 [0xD6,0xD0] 这两个字节存储。 (本地化) 不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一 个字符的各种汉字延伸编码方式,称为 A N S I 编码。在简体 中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统 下,ANSI 编码代表 JIS 编码。 中文 DOS,中文 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法 Windows 将属于两种语言的文字,存储在同一段 A N S I 编码的文本中 95/98,日文 Windows 95/98 。 为了使国际间信息交流更加方便,国际组织制定了 U N I C O D E Windows 字符集,为各种语言中的每一个字符设定了统一并且唯一的数 NT/2000/XP, UNICODE 字编号,以满足跨语言、跨平台进行文本转换、处理的要求。 Linux,Java 系统内码
13
GBK
GBK是GB2312的扩展,是向上兼容的。它包含 了20902个汉字。同时GBK收录了Unicode基本 多文种平面中的所有CJK汉字。 编码范围:0x8140 - 0xFEFE 。高字节范围是 0×81-0xFE,低字节范围是0x40-7E和0x800xFE 低字节是0x40-0x7E的GBK字符有一定特殊 性,因为这些字符占用了ASCII码的位置,这 样会给一些系统带来麻烦。
8
3 字符集与编码
各个国家和地区所制定的不同 ANSI 编码标准 中,都只规定了各自语言所需的“字符”。比如:汉 字标准(GB2312)中没有规定韩国语字符怎样存 储。这些 ANSI 编码标准所规定的内容包含两层 含义: 1. 使用哪些字符。也就是说哪些汉字,字母和符号 会被收入标准中。所包含“字符”的集合就叫做“字 符集”。 2. 规定每个“字符”分别用一个字节还是多个字节存 储,用哪些字节来存储,这个规定就叫做“编码”。
17
UTF-16是UCS-2的超集,UTF-16编码的两 字节编码方式完全和UCS-2相同,也就是说 在BMP的框架内UCS-2完全等同与UTF-16。 实际情况当中常常把UCS-16当作UCS-2的别 名。
18
UCS-2和UTF-16在存储和传输时会使用两种不同的 字节序,分别是big endian和little endian(大尾和 小尾)。例如“啊”(U+554A)用big endian表示就 是0x554A,用little endian表示就是0x4A55。UCS2和UTF-16默认的字节序是big endian方式。 在传输过程中为了说明字节序需要在字节流前加上 BOM(Byte order Mark),0xFEFF表示是big endian,0xFFFE表示是little endian。UCS-2BE、 UCS-2LE是实际应用中使用的编码名称,对应着 big endian和little endian,UTF-16BE、UTF-16LE 也是如此。因为默认是BE字节序,所以可以把 UCS-2当做是UCS-2BE的别名。
16
UCS-2、UTF-16是UCS字符集(或者说是 Unicode字符集)实际应用中的具体编码方 式。UCS-2是两个字节的等宽编码,因为只 是使用了两个字节的编码空间,所以只能对 BMP中的字符做编码。 UTF-16是变长编码,用两个字节对BMP内的 字符编码,用4个字节对超出BMP范围的辅 助平面内的字符作编码。
D6 D0 CE C4 31 32 33 0 中 文 1 2 3 \0
5
字符串在内存中的存放方法
在 UNICODE 被采用之后,计算机存放字符串时, 改为存放每个字符在 UNICODE 字符集中的序号。 目前计算机一般使用 2 个字节(16 位)来存放一个 序号(DBCS),因此,这种方式存放的字符也被 称作宽字节字符。比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序 号:一共占 10 个字节。
14
Big5
Big5是双字节编码,高字节编码范围是0x810xFE,低字节编码范围是0x40-0x7E和0xA10xFE。和GBK相比,少了低字节是0x80-0xA0的组 合。 Big5收录的汉字只包括繁体汉字,不包括简体汉 字,一些生僻的汉字也没有收录。 因为Big5也占用了ASCII的编码空间(低字节所使 用的0x40-0x7E),所以Big5编码在一些环境下存 在和GBK编码相同的问题,即低字节范围为0x400x7E的字符有可能会被误处理。
19
UCS-2和UTF-16也可以理解为和ASCII兼 容,在ASCII编码的每个字节前加上0x00, 就得到相应字符的UCS-2编码。 UCS-2和UTF-16中会使用0x00作为某个字符 编码的一部分,某些系统会把0x00当作字符 串结束的标志,在处理UCS-2或UTF-16编码 时会出现问题。
22
例如“啊”字的UCS-2编码是0x554A,对应的二进制 是0101 0101 0100 1010,转成UTF-8编码之后的 二进制是1110 0101 10 010101 10 001010,对应 的十六进制是0xE5958A。 UCS-4也是一种UCS字符集的编码方式,是使用4 个字节的等宽编码,可以用UCS-4来表示BMP之外 的辅助面字符。UCS-2中每两个字节前再加上 0x0000就得到了BMP字符的UCS-4编码。从UCS-4 到UTF-8也存在转换关系,根据这种转换关系, UTF-8最多可以使用六个字节来编码UCS-4。
23
UTF-8的特性
UTF-8完全和ASCII兼容,也就是说ASCII对应的 字符在UTF-8中和ASCII编码完全一致。范围在 0x00-0x7F之内的字符一定是ASCII字符,不可能 是其他字符的一部分。GBK和Big5都存在的缺陷 在UTF-8中是不存在的。 大于U+007F的UCS字符,在UTF-8编码中至少是 两个字节。 GBK编码中的汉字字符都在UCS-2中的范围都在 U+0800 - U+FFFF之间,所以每个GBK编码中的 汉字字符的UTF-8编码都是3个字节。
20
UTF-8
UTF-8是UCS字符集的另一种编码方式, UTF-16的每个单元是两个字节(16位),而 UTF-8的每个单元是一个字节(8位)。UTF16中用一个或两个双字节表示一个字符, UTF-8中用一个或几个单字节表示一个字 符。
21
从UCS-2到UTF-8之间有以下转换关系:
UCS-2 UTF-8 U+0000 - U+007F 0xxxxxxx U+0080 - U+07FF 110xxxxx 10xxxxxx U+0800 - U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
阶段二
阶段三
3
字符串在内存中的存放方法
在 ASCII 阶段,单字节字符串使用一个字节 存放一个字符(SBCS)。比如,“Bob123” 在内存中为:
42 6F 62 31 32 33 0 B o b 1 2 3 \0
4
字符串在内存中的存放方法
在使用 ANSI 编码支持多种语言阶段,每个 字符使用一个字节或多个字节来表示 (MBCS),因此,这种方式存放的字符也 被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占 2个字节,每个英文和数字字符占1个字节:
9
各个国家和地区在制定编码标准的时候,“字 符的集合”和“编码”一般都是同时制定的。因 此,平常我们所说的“字符集”,比如: GB2312, GBK, JIS 等,除了有“字符的集合” 这层含义外,同时也包含了“编码”的含义。
10
4 常用字符集介绍
ASCII码是7位编码,编码范围是0x000x7F。ASCII字符集包括英文字母、阿拉伯 数字和标点符号等字符。其中0x00-0x20和 0x7F共33个控制字符。 只支持ASCII码的系统会忽略每个字节的最高 位,只认为低7位是有效位。HZ字符编码就 是早期为了在只支持7位ASCII系统中传输中 文而设计的编码。早期很多邮件系统也只支 持ASCII编码,为了传输中文邮件必须使用 BASE64或者其他编码方式。
25
Unicode字符串,每个字符(汉字、英文字母)都占2 个字节,以2个连续的\0结尾,NT操作系统内核用 的是这种字符串。 UTF-8是Unicode一种压缩形式,英文A在Unicode 中表示为0x0041,老外觉得这种存储方式浪费了 50%的空间,于是就把英文压缩成1个字节,成了 UTF-8编码,但是汉字在UTF-8中占3个字节,显然 用做中文不如ANSI合算。这就是中国的网页用作 ANSI编码而老外的网页常用UTF-8的原因。 UTF-8在还游戏里运用的很广泛,比如WOW的lua 脚本等。
24
UTF-8中的每个字符编码的首字节总在0x00-0xFD 之间(不考虑UCS-4支持的情况,首字节在0x000xEF之间)。根据首字节就可以判断之后连续几 个字节。 在UTF-8的编码的传输过程中即使丢掉一个字 节,根据编码规律也很容易定位丢掉的位置,不 会影响到其他字符。在其他双字节编码中,一旦 损失一个字节,就会影响到此字节之后的所有字 符。从这点可以看出UTF-8编码非常适合作为传 输编码。
15