阶段二
ANSI编码
(本地化)
为使计算机支持更多语言,通常使用 0x80~0xFF 范围的
2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系
统中,使用 [0xD6,0xD0] 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了
GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个
字节来代表一个字符的各种汉字延伸编码方式,称为
ANSI 编码。在简体中文系统下,ANSI 编码代表
GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS
编码。
不同 ANSI 编码之间互不兼容,当信息在国际间交流时,
无法将属于两种语言的文字,存储在同一段 ANSI 编码的
文本中。
中文 DOS,中文
Windows 95/98,日文
Windows 95/98
阶段三
UNICODE
(国际化)
为了使国际间信息交流更加方便,国际组织制定了
UNICODE 字符集,为各种语言中的每一个字符设定了统
一并且唯一的数字编号,以满足跨语言、跨平台进行文本转
换、处理的要求。
Windows NT/2000
/XP,Linux,Java
字符串在内存中的存放方法:
在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,"Bob123" 在内存中为:
42 6F 62 31 32 33 00
Bob123\0
在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放
的字符也被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每
个英文和数字字符占1个字节:
D6 D0 CE C4 31 32 33 00
中文123\0
在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。目前计算机
一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比
如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:
2D 4E 87 65 31 00 32 00 33 00 00 00
← 在 x86 CPU 中,低字节在前
中文123\0
字符,字节和编码 - Characters, Bytes And Encoding http://www.regexlab.com/zh/encoding.htm