字符集编码
写在前面:
在输出字符和字符串的时候,如何才能达到理想的效果呢?
这就需要了解计算机中的字符是怎样被储存以及调用的
学习资料来自网络,标明出处
目录 |
by romaniz
字符编码也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储 在计算机技术发展的早期,如ASCII和EBCDIC这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码 ——bia度百科 |
编码,又称代码,是用预先规定的方法,将文字、数字或其他对象编成数码,或将信息、数据转换成规定的电脉冲信号。它在电子计算机、电视遥控和通讯等方面广泛使用 在电子计算机中,将指令和数字实行编码后,适合计算机运行和操作。编码作为计算机书写指令的过程,是程序设计活动的一部分。在数字磁记录中,可按照一定的规则,进行输入信息序列向编码序列的过程转换。在遥控系统和通信系统中,采用编码步骤可提高传送的效率和可靠性 将数据转换为编码字符,必要时又可编码成原来的数据形式 ——bia度百科 |
各个国家和地区所制定的不同ANSI编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些ANSI编码标准所规定的内容包含两层含义:
各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常所说的“字符集”,比如:GB2312、GBK、JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义 “UNICODE字符集”包含了各种语言中使用到的所有“字符”。用来给UNICODE字符集编码的标准有很多种,比如:UTF-8、UTF-7、UTF-16、UnicodeLittle、UnicodeBig 等 ——bia度百科 |
各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常所说的“字符集”,比如:GB2312、GBK、JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义 ——bia度百科 |
American Standard Code for Information Interchange
起步阶段
美国(国家)信息交换标准(代)码,一种使用7个或8个二进制位进行编码的方案,最多可以给256个字符(包括字母、数字、标点符号、控制字符及其他符号)分配(或指定)数值
虽然标准ASCII码是7位编码,但由于计算机基本处理单位为字节(1byte = 8bit),所以一般仍以一个字节来存放一个ASCII 字符。每一个字节中多余出来的一位(最高位)在计算机内部通常保持为0(在数据传输时可用作奇偶校验位)
在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS),比如"Bob123" 在内存中为:
42 |
6F |
62 |
31 |
32 |
33 |
00 |
B |
o |
b |
1 |
2 |
3 |
\0 |
ASCII码于1961年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码
目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码,它同时也被国际标准化组织批准为国际标准
ASCII码划分为两个集合:
128个字符的标准ASCII码
标准ASCII码为7位
其中95个字符可以显示,另外33个不可以显示
附加的128个字符的扩充
扩充ASCII码为8位
——Wikipedia
单字符编码是最简单的编码规则,每一个字节直接作为一个UNICODE字符
比如[0xD6,0xD0]这两个字节,通过iso-8859-1转化为字符串时,将直接得到 [0x00D6,0x00D0]两个UNICODE字符,即 "ÖÐ"
反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符
由于标准 ASCII 字符集字符数目有限,在实际应用中往往无法满足要求。为此,国际标准化组织又制定了 ISO2022 标准,它规定了在保持与 ISO646 兼容的前提下将ASCII 字符集扩充为8位代码的统一方法。ISO陆续制定了一批适用于不同地区的扩充 ASCII 字符集,每种扩充 ASCII 字符集分别可以扩充 128 个字符,这些扩充字符的编码均为高位为 1 的 8 位代码(即十进制数 128~255 ),称为扩展ASCII码,见下ANSI编码
——bia度百科
American National Standards Institute 美国国家标准学会
本地化
为使计算机支持更多语言,通常使用0x80~0xFF范围的2个字节来表示1个字符,使用0x80~0xffff来编码,即扩展的ASCII编码。比如:汉字 '中' 在中文操作系统中,使用[0xD6,0xD0]这两个字节存储
不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码
在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码
在使用ANSI编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符
比如,"中文123" 在中文Windows 95内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:
D6 | D0 | CE | C4 | 31 | 32 | 33 | 00 |
中 | 文 | 1 | 2 | 3 | \0 |
把UNICODE字符串通过ANSI编码转化为“字节串”时,根据各自编码的规定,一个UNICODE字符可能转化成一个字节或多个字节
反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如[0xD6,0xD0]这两个字节,通过GB2312转化为字符串时,将得到[0x4E2D]一个字符,即 '中' 字
ANSI编码标准有:
GB2312
BIG5
Shift_JIS
ISO-8859-2
……
ANSI编码的特点:
1. 这些“ANSI的编码”都只能处理各自语言范围之内的UNICODE字符
2. “UNICODE字符”与“转换出来的字节”之间的关系是人为规定的
不同ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段ANSI编码的文本中
——bia度百科
国际化
为了使国际间信息交流更加方便,国际组织制定了UNICODE字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求
UNICODE又称为统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等,于1990年开始研发,1994年正式公布
UNICODE是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求
UNICODE的编码有:
UTF-7
UTF-8
UTF-16
UnicodeLittle
UnicodeBig
……
与“ANSI的编码”类似的,把字符串通过UNICODE的编码转化成“字节串”时,一个UNICODE字符可能转化成一个字节或多个字节
与“ANSI的编码”不同的是:
1. 这些“UNICODE编码”能够处理所有的UNICODE字符
2. “UNICODE字符”与“转换出来的字节”之间是可以通过计算得到的
——bia度百科
——https://www.jianshu.com/p/8b87a05c23b1