“浅入深处“编码历史,字符串编码(ASCII, GBK, ANSI, Unicode, UTF-8编码),为什么记事本默认ANSI编码,Unicode和UTF8有什么区别

简介: “浅入深处“编码历史,字符串编码(ASCII, GBK, ANSI, Unicode, UTF-8编码),为什么记事本默认ANSI编码,Unicode和UTF8有什么区别

迅速了解编码的发展历程:

ASCII => GB2312 => GBK=>gb18030 => ISO-8859-1(Unicode)(latin-1) => UTF-8(Unicode)


从ASCII码谈起

ASCII码:16384个字符。这就是ANSI字符标准。英文一个字节,中文两个字节。


早期计算机(美国人造的),用ASCII编码(一个字节,8位,可以表示256个编码,实际英语世界里字母、数字和常用符号完全够用)


但是随着计算机的发展,需要更加人性化的编码来适应世界,于是编码的迭代开始了


中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。


汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时进行了大量扩充


GBK 是又一个汉字编码标准,全称《汉字内码扩展规范》(GBK),英文名称 Chinese Internal Code Specification


中国的中文编码表升级,融合了更多的中文文字符号。


中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充GB18030 编码。


每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。


最后有个叫 ISO 的组织,他们一起创造了一种编码 Unicode(中英文都占取两个字节),这种编码可以容纳世界上任何一个文字和标志。所以只要电脑上有Unicode这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成Unicode编码就可以被其它电脑正常解释。


Unicode 在网络传输中,出现了两个标准 UTF-8 (中文三个字节,英文一个字节)和 UTF-16,分别每次传输 8个位和 16个位。


UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式, UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。


你可能有迷惑:

为什么Unicode使用那么广泛,更适应全世界使用,我们的记事本还是用的是ASCII码呢?


ANSI:并不是某一种特定的字符编码。在不同的系统中,ANSI 表示不同的编码,美国的系统中ANSI编码其实是ASCII编码,ASCII 编码不能表示汉字,所以汉字我们可以看到汉字为乱码,而你的系统中 汉字 之所以能够正常显示,ANSI编码其实是GBK编码;而韩文系统中(“한국어”正常显示)ANSI编码其实是EUC-KR编码)


windows 系统通过 Windows code pages 的值来确定当前系统的编码方式(ANSI 只存在于 Windows 系统,不同地区发行的系统,ANSI指代不同)


(根据装的系统编码来决定的)


Unicode:


使用两个字节对世界上几乎所有的语言进行编码


(0x0000-0xFFFF)


Unicode是针对所有计算机的使用者定义一套统一的编码规范,这样计算机使用者就避免了编码转换的问题。


UTF-8(Unicode transfer format -8 ,后面的8代表是以8位二进制为单位来传输符号的)


它 是 Unicode 一种压缩形式,英文 A 在 Unicode 中表示为 0x0041,老外觉得这种存储方式太浪费,因为浪费了 50% 的空间,于是就把英文压缩成 1 个字节,成了 utf8 编码,但是汉字在 utf8 中占 3 个字节,显然用作中文不如 ansi 合算,这就是中国有时候用ansi而不用 UTF8 的原因。


相关文章
|
9月前
|
存储 自然语言处理 C++
Unicode编码
Unicode编码
310 4
|
1月前
|
存储 自然语言处理 程序员
字符串编码(ASCII, GBK, ANSI, Unicode(‘\u‘), UTF-8编码)(转载)
本文介绍了字符串编码的发展历程,从ASCII、GB2312到Unicode和UTF-8,详细解释了各种编码的特点和应用场景,重点阐述了解决多语言乱码问题的演变过程。
197 54
|
存储 Java 关系型数据库
【精炼易懂】字符集、编码、乱码问题、ASCII、GBK、Unicode、UTF-8详解+实例说明
【精炼易懂】字符集、编码、乱码问题、ASCII、GBK、Unicode、UTF-8详解+实例说明
6317 4
|
存储 Windows
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解(二)
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解
333 1
|
Java Linux 开发工具
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解(一)
编码 GBK 的不可映射字符 (0x80),sublime设置中文,sublime没有GBK编码选项的问题详解
816 1
|
iOS开发
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换
Unicode 与 UTF-8 编码的转换
|
存储 Java 关系型数据库
【技术干货】理解Unicode字符编码
本文对字符编码Unicode以及UTF8和UTF16的编码原理进行了详细说明
726 1
|
Web App开发 存储 Windows
字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
转自:  http://apps.hi.baidu.com/share/detail/17798660 字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得字符编码的知识。不注意的人可能对这个不在意,但这些名词有时候实在让人迷惑,对想学习计算机知识的人来说,搞懂它也十分重要,我也是在学习中慢慢了解了一些这方面的知识。
1945 0
ANSI - Unicode - UTF8 转换
ANSI - Unicode - UTF8 转换
120 0
|
存储 算法 Java
【字符编码】字符编码 && Base64编码算法
  在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法,然后,这个问题一直放着,想找个机会解决。于是乎,终于逮到机会,开始下手。
269 0
【字符编码】字符编码 && Base64编码算法