字符,字节和编码
摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实
现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消
除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。
掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅读本文时需要
慢读多想,多思考。
引言
字符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的
办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因,实际上由于
底层代码本身有问题所导致的。因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字
符编码缺乏准确的理解。
1. 编码问题的由来,相关概念的理解
1.1 字符与编码的发展
从计算机对多国语言的支持角度看,大致可以分为三个阶段:
系统内码 说明 系统
阶段一
计算机刚开始只支持英语,其它语言不能够在计算机上
存储和显示。
英文
阶段二
编码
(本地化)
为使计算机支持更多语言,通常使用 范
围的 个字节来表示 个字符。比如:汉字 中在中
文操作系统中,使用 这两个字节存储。
不同的国家和地区制定了不同的标准,由此产生了
等各自的编码标准。这些使用
个字节来代表一个字符的各种汉字延伸编码方式,称为
ANSI 编码。在简体中文系统下,编码代表
编码,在日文操作系统下,编码代表
编码。
不同 编码之间互不兼容,当信息在国际间交流
时,无法将属于两种语言的文字,存储在同一段 ANSI
编码的文本中。
中文 ,中文
!"#",日
文 !"#"
阶段三
$%
(国际化)
为了使国际间信息交流更加方便,国际组织制定了
UNICODE 字符集,为各种语言中的每一个字符设定
了统一并且唯一的数字编号,以满足跨语言、跨平台进
行文本转换、处理的要求。
!
&##'(,)*
,+,+
字符串在内存中的存放方法:
在 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如, "Bob123" 在内存
中为:
-
. /