字符与编码

合集下载

常用的中文字符编码

常用的中文字符编码

常用的中文字符编码
常用的中文字符编码有以下几种:
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和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字符集编码占用的存储空间较小,但只支持中文字符。

最后,需要考虑与其他系统的兼容性。

如果数据库需要与其他系统进行数据交换,那么需要确保数据库字符集编码和表字符集编码与其他系统兼容。

几种常见字符集与字符编码

几种常见字符集与字符编码

⼏种常见字符集与字符编码字符集的概念 字符(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等标准。

六、字符和汉字的输出方法字符和汉字的输出方法包括屏幕输出、打印机输出、文件输出等。

256 257 258字符编码

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. 数据传输在网络通信和数据传输过程中,字符编码的选择直接影响着数据的准确传输和解析。

采用合适的字符编码方案可以有效地避免因编码问题造成的数据丢失和信息不清晰的情况,保证数据的完整性和可靠性。

8086字符对应的编码

8086字符对应的编码

8086字符对应的编码
8086是一种16位的微处理器,它使用ASCII编码来表示字符。

ASCII(American Standard Code for Information Interchange)
是一种常见的字符编码标准,它使用7位二进制数来表示128个字符。

下面是一些常见字符在ASCII编码中的对应编码:
字母A对应的编码是65(十进制)或者41(十六进制)。

字母B对应的编码是66(十进制)或者42(十六进制)。

数字0对应的编码是48(十进制)或者30(十六进制)。

数字1对应的编码是49(十进制)或者31(十六进制)。

特殊字符$对应的编码是36(十进制)或者24(十六进制)。

特殊字符@对应的编码是64(十进制)或者40(十六进制)。

这只是一小部分字符的编码示例,ASCII编码共涵盖了128个字符,包括大写字母、小写字母、数字和一些特殊字符。

请注意,ASCII编码只使用了7位二进制数,而8086是16位的微处理器,因此在8086中,每个字符的编码会使用两个字节(16位)来表示。

例如,字母A的编码在8086中表示为00 41(十六进制),其中00是高位字节,41是低位字节。

总结起来,8086字符的编码是使用ASCII编码标准,每个字符使用两个字节(16位)来表示。

Windows程序员必须知道的字符编码和字符集

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. ASCII码:这是美国在19世纪60年代的时候为了建立英文字符和二进制的关系时制定的编码规范,它能表示128个字符,其中包括英文字符、阿拉伯数字、西文字符以及32个控制字符。

它用一个字节来表示具体的字符,但它只用后7位来表示字符(2^7=128),最前面的一位统一规定为0。

2. 扩展的ASCII码:原本的ASCII码对于英文语言的国家是够用了,但是欧洲国家的一些语言会有拼音,这时7个字节就不够用了。

因此一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。

比如,法语中的é的编码为130(二进制10000010)。

这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。

此外,还有Unicode编码,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。

以上内容仅供参考,如需更多信息,建议查阅计算机方面的专业书籍或咨询相关专业人士。

哈夫曼编码 字符与编码对照表

哈夫曼编码 字符与编码对照表

哈夫曼编码(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 字符,字节,字符串理解编码的关键,是要把字符的概念和字节的概念理解准确。

几种字符编码的关系

几种字符编码的关系

几种字符编码的关系不同的字符编码通常用于在计算机系统中表示字符集。

以下是一些常见的字符编码及其之间的关系:1. ASCII(美国标准信息交换码):ASCII是最基本的字符编码,使用7位编码来表示128个字符,包括英文字母、数字和一些常用符号。

ASCII编码是其他字符编码的基础。

2. ISO-8859:ISO-8859是ASCII的扩展编码,使用8位编码来表示256个字符。

有ISO-8859-1到ISO-8859-15等多个版本,每个版本包含不同的语言字符。

3. Unicode:Unicode是全球字符集的标准编码,包含几乎所有的字符、符号和表意文字。

Unicode使用16位编码(称为UTF-16)来表示字符,但有一些字符使用32位编码(称为UTF-32)。

4. UTF-8:UTF-8是一种变长编码,可以使用1到4个字节来表示Unicode字符。

UTF-8编码兼容ASCII编码,对于ASCII字符,使用1个字节表示,而其他字符使用多个字节表示。

5. UTF-16:UTF-16是一种使用16位编码的Unicode编码方式。

对于基本多文种平面(BMP)中的字符,使用两个字节表示,而其他字符使用4个字节表示。

6. UTF-32:UTF-32是一种使用32位编码的Unicode编码方式,每个字符都使用4个字节表示。

与UTF-8和UTF-16相比,UTF-32编码在存储空间方面需要更多的内存。

总之,ASCII编码是字符编码的起点,而ISO-8859、Unicode 和它们的变种(如UTF-8、UTF-16和UTF-32)是后续发展的结果,目的是支持更多的字符和语言。

字符编码

字符编码
其中每个语言下的ANSI编码,都有一套一对一的编码转换器,Unicode变成所有编码转换的中间介质。所有 的编码都有一个转换器可以转换到Unicode,而Unicode也可以转换到其他所有的编码。
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个字符。

字符编码与解码详解

字符编码与解码详解

字符编码与解码详解 先简单介绍⼀下编码的情况,我们都知道机器上显⽰的字符最终存在计算机内存⾥都是以⼆进制码的形式存在的。

最开始的计算机字符只能⽤ASCII编码的⽅式去存储,⽽⼀个ASCII码占⽤⼀个字节,也就是说ASCII编码最多只能编码256个字符(键盘上所有的半⾓字符)。

但为了表⽰别的国家⽂字,就必须对原有的字符编码⽅式进⾏扩充。

⽽对于中⽂来说,主要有两种编码⽅式,分别是gb2312和gbk,前者主要是⽤于编码简体中⽂字符,⽽后者除了简体中⽂字符还包括繁体中⽂字符。

计算机迅速国际化之后,编码便不能只局限于英⽂字符和中⽂字符,于是出现了⼀个叫Unicode编码的⽅式,这种编码⽅式对每个字符都使⽤四个字节的⽅式存储,这样⼀来就⾜够表⽰所有字符了,但事实上所有的半⾓字符我们只需要1个字节来表⽰便⾜够了,全部字符都⽤Unicode编码⽅式的话,很容易造成资源浪费的情况,所以作为折中的考虑,UTF-8逐渐成为全球的流⾏的编码标准,UTF-8编码能够根据字符分别不同的字节⼤⼩,英⽂字符依然⽤⼀个字节表⽰,⽽中⽂有些则是两个字节表⽰,有些则是三个字节。

本⽂直接通过三个例⼦来讲解字符编码和解码的原理: - 记事本字符的编码 - 前端页⾯中的<meta charset='utf-8'> - 编程语⾔中读写⽂件的编码(python3.x) 顾名思义,编码就是把⼀个字符编码成⼆进制码存起来的⽅式,⽽解码就是把这个⼆进制码按照原本编码的规则还原成原来的字符。

1. 记事本字符编码 当我们打开记事本,然后打下⼀⾏字符的时候,对机器来说都是⼀串不可识别的字符,于是我们保存的时候,就是要对这些我们输⼊的字符进⾏编码了。

如果你输⼊⼀串⾮英⽂字符,计算机会提醒你有些字符不能正确编码(windows中⽂版的话没有这种情况,因为你按下ctrl+s计算机会有⼀个默认的中⽂编码⽅式,则没有出现⽆法编码的情况。

微型计算机中数的编码与字符的表示

微型计算机中数的编码与字符的表示

3.汉字的编码
计算机要处理汉字信息,就必须首先解决汉字的 表示问题。同英文字符一样,汉字的表示也只能采 用二进制编码形式,目前使用比较普遍的是我国制 定的汉字编码标准GB2312-80,该标准共包含一、 二级汉字6763个,其他符号682个,每个符号都是 用14位(两个7位)二进制数进行编码,通常叫做国 标码。
所以在二\ 十六之间互相转换时,原则为: 二 到 十六, 以小数点为分界线,向左每4位一个组合转
换成一位十六进制数,不够的左边补0,而右边每4位 一个组合转换成16进制,不够的右边补0。 11011•101 0001 1011 1010
1 B ·A
1 数的表示与转换方法
十六 到 二 将每个十六进制位转为4位二进制数即可。
* 十六进制数 可认为是对二进制数的简化表现形式,它与二进制数有 明显的对应关系。 包含0、1…9、A、B、C、D、E、F 16个符号,逢十六 进一
1 数的表示与转换方法
(2) 不同进位位数值的转换 二\ 十六制 由于一个十六进制位正好由4位二进制数字构成: 0000 0001 0010…1001 1010 1011… 1110 1111 0 12 9AB E F 0 1 2 9 10 11 14 15
2.字符的编码
在计算机中除了数值之外,还有一类非常重要 的数据,那就是字符,如英文的大小写字母(A,B, C,…,a,b,c,…),数字符号(0,1,2,…, 9)以及其他常用符号(如:?、=、%、+等)。 在计算机中,这些符号都是用二进制编码的形式表 示。
目前,一般都是采用美国标准信息交换码,它使 用七位二进制编码来表示一个符号,通常把它称为 ASCII码。由于用七位码来表示一个符号,故该编码 方案中共有128个符号(27=128)。

Python的字符串和编码

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。

计算机应用基础1.3字符的编码1.3 字符的编码

计算机应用基础1.3字符的编码1.3 字符的编码

1.3 字符的编码
9
4. 汉字字形码
汉字字形码 —— 汉字字形点阵的代码
计算
16×16点阵显示汉字, 需要多少存储空间?
16×16/8 = 32字节
用于汉字在显示屏或打印机输出。 通常有两种表示方式:点阵和矢量表示方式。
9
1.3 字符的编码
10
5. 汉字地址码
汉字库中存储汉字字形信息的逻辑地址码
计算机用一个字节(8个二进制位)存放一个7位 ASCII码,最高位置为0。
1.3 字符的编码
2
7位ASCII代码表
1.3 字符的编码
3
字符 十六进制表示
空格
20H
‘0’~‘9’ 30H~39H
‘A’~‘Z’ 41H~5AHHale Waihona Puke ‘a’~‘z’ 61H~7AH
十进制表示
32 48~57 65~90 97~122
1.3 字符的编码
1
1.3.5 字符的编码
1.西文字符的编码
计算机中最常用的字符编码是ASCII(American Standard Code for Information Interchange,美国信 息交换标准交换代码),为国际标准。
国际通用的ASCII码是7位ASCII码,用7位二进制数 表示一个字符的编码,共有27=128个不同的编码值,相 应可以表示128个不同字符的编码。
汉字内码:2个字节存储 每个字节最高位置“1”

目地:区分于ASCII码 方法:汉字的国标码 +8080H
“中”字的国标码转换为汉字内码: 国标码 (5650)H+(8080)H=(D6D0)H 或:( 0101 0110 0101 0000)+(1000 0000 1000 0000)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

概念描述 举例
字符 人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……
字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……
ANSI
字符串 在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI 字符串或者多字节字符串。 "中文123"
通常,一直在英文环境下做开发的程序员们,容易有这种误解。
误解二 在 DOS,Windows 98 等非 UNICODE 环境下,字符串都是以 ANSI 编码的字节形式存在的。这种以字节形式存在的字符串,必须知道是哪种编码才能被正确地使用。这使我们形成了一个惯性思维:“字符串的编码”。
当 UNICODE 被支持后,Java 中的 String 是以字符的“序号”来存储的,不是以“某种编码的字节”来存储的,因此已经不存在“字符串的编码”这个概念了。只有在“字符串”与“字节串”转化时,或者,将一个“字节串”当成一个 ANSI 字符串时,才有编码的概念。
2D 4E 87 65 31 00 32 00 33 00 00 00 ← 在 x86 CPU 中,低字节在前
中 文 1 2 3 \0
一共占 10 个字节。
1.2 字符,字节,字符串
理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:
以上需要注意几点:
Java 中的 char 代表一个“UNICODE 字符(宽字节字符)”,而 C++ 中的 char 代表一个字节。
MultiByteToWideChar() 和 WideCharToMultiByte() 是 Windows API 函数。
2.2 C++ 中相关实现方法
在 Visual C++ 中,UNICODE 字符串常量有更简单的表示方法。如果源程序的编码与当前默认 ANSI 编码不符,则需要使用 #pragma setlocale,告诉编译器源程序使用的编码:
// 如果源程序的编码与当前默认 ANSI 编码不一致,
// 则需要此行,编译时用来指明当前源程序使用的编码
1.3 字符集与编码
各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:
使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,"Bob123" 在内存中为:
42 6F 62 31 32 33 00
B o b 1 2 3 \0
在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:
不少的人都有这个误解。
第一种误解,往往是导致乱码产生的原因。第二种误解,往往导致本来容易纠正的乱码问题变得更复杂。
在这里,我们可以看到,其中所讲的“误解一”,即采用每“一个字节”就是“一个字符”的转化方法,实际上也就等同于采用 iso-8859-1 进行转化。因此,我们常常使用 bytes = string.getBytes("iso-8859-1") 来进行逆向操作,得到原始的“字节串”。然后再使用正确的 ANSI 编码,比如 string = new String(bytes, "GB2312"),来得到正确的“UNICODE 字符串”。
声明一段字符串常量:
// ANSI 字符串,内容长度 7 字节
char sz[20] = "中文123";
// UNICODE 字符串,内容长度 5 个 wchar_t(10 字节)
wchar_t wsz[20] = L"\x4E2D\x6587\x0031\x0032\x0033";
// GCC 中使用大写 %S
fwprintf(fp, L"%s\n", wsz);
// 把 UNICODE 字符串按照 setlocale 指定的编码转换成字节
wcstombs(sz, wsz, 20);
// 把字节串按照 setlocale 指定的编码转换成 UNICODE 字符串
mbstowcs(wsz, sz, 20);
分类 编码标准 说明
单字节字符编码 ISO-8859-1 最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 "ÖÐ"。
阶段三 ቤተ መጻሕፍቲ ባይዱNICODE
(国际化) 为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。 Windows NT/2000/XP,Linux,Java
字符串在内存中的存放方法:
“UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。
1.4 常用的编码简介
简单介绍一下常用的编码规则,为后边的章节做一个准备。在这里,我们根据编码规则的特点,把所有的编码分成三类:
反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。
ANSI 编码 GB2312,
BIG5,
Shift_JIS,
ISO-8859-2 …… 把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。
1. 编码问题的由来,相关概念的理解
1.1 字符与编码的发展
从计算机对多国语言的支持角度看,大致可以分为三个阶段:
系统内码 说明 系统
阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。 英文 DOS
阶段二 ANSI编码
(本地化) 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。
UNICODE 字符串 wchar_t[] String
字节串→字符串 mbstowcs(), MultiByteToWideChar() string = new String(bytes, "encoding")
字符串→字节串 wcstombs(), WideCharToMultiByte() bytes = string.getBytes("encoding")
不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 中文 DOS,中文 Windows 95/98,日文 Windows 95/98
与“ANSI 编码”不同的是:
1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
2. “UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。
我们实际上没有必要去深究每一种编码具体把某一个字符编码成了哪几个字节,我们只需要知道“编码”的概念就是把“字符”转化成“字节”就可以了。对于“UNICODE 编码”,由于它们是可以通过计算得到的,因此,在特殊的场合,我们可以去了解某一种“UNICODE 编码”是怎样的规则。
反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 '中' 字。
“ANSI 编码”的特点:
1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。
D6 D0 CE C4 31 32 33 00
中 文 1 2 3 \0
在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:
(占7字节)
UNICODE
字符串 在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串。 L"中文123"
相关文档
最新文档