字符集编码的发展与简介(一):ASCII码

其他章节:
字符集编码的发展与简介(一):ASCII码
字符集编码的发展与简介(二):ANSI
字符集编码的发展与简介(三):UNICODE
字符集编码的发展与简介(四):字符集编码模型



文前

刚刚入职的时候,我们所有项目都是“使用多字节字符集”的,当时负责的内容也是在比较独立的库内,不涉及到接口相关的东宫西,所以入职一年的时间里,我对字符串和字符集编码的相关知识都是比较模糊的,仅仅停留在“能跑就行”的阶段。

后来在组内负责的内容更多了,开始编写一些接口函数、导出函数和回调函数等等,也遇到了 CString 类型、LRCSTR 类型跨库调用时返回乱码的问题,所以开始意识到有必要花时间研究一下字符串和字符集的相关内容。后来也开始接一些乱七八糟的活儿,涉及到读写 excel、txt、网络通讯等内容,这些方面对字符串的使用更多,也更五花八门,我也开始意识到,十分有必要弄明白字符集编码相关的内容了,至少把各个专业名字及其之间的关系弄明白。于是从 2023 年 3 月份开始,断断续续的研究字符串和字符集编码的内容,一直到 2023 年的 10 月份,已经基本弄明白了字符集编码模型、VS 中字符串的使用方法等内容。但是随着研究的深入,更多的问题冒了出来,所以后期还会继续补充和完善字符串相关的内容。

相关的文档我自己已经整理出了两篇,这篇是比较完善的“字符集编码”相关的内容。发出来,也算是一个总结和分享。

本文依次介绍了ASCII、ANSI 和 UNICODE 三种字符集的发展史。穿插介绍了国标码(GB)、GBK 编码方式、多字节字符集(MBCS)、Unicode三种编码形式、BOM、Unicode 与 UCS 的关系等问题。最后以 Unicode 为例总结了字符集编码模型,该模型适用于目前所有的字符集。

本文较长,为方便阅读和检索,在此一共分为四篇文章发出来。

全文的参考文献在每章节的最后都全部列出了。

字符集编码

在不知道字符串是什么编码的情况下使用字符串是没有意义的。尤其是在跨库、跨语言、跨平台编程,接口的制作、调用,读写文件、数据库时,明确字符串的编码就尤其重要。

在使用字符串相关函数的时候,例如 _tcslen(),参数的使用也与字符集编码有关。

编码(ecodng)是指以某种形式表示信息的过程。[13]

例如:人类语言就是一种编码系统,我们通过约定好的语言或手势来表示信息。文字是一种衍生的编码系统,通过这种编码系统,文字与语言(或手势)相对应,可以正确“解码”出要传递的信息。

对计算机来说,他所知道的唯一表示方式就是二进制数,而我们在计算机上要传递的信息其实是文字,那么文字怎样让计算机识别,就需要一套编码系统,于是衍生出了字符集编码(character set encoding)的概念。

字符集编码至少包含两个组成部分:一组需要表达的字符(字符集)和一个编码系统,该系统能够将这套字符转为计算机内部可以识别的单元。

ASCII码

ASCII发展史

美国国家标准学会(American National Standard Institute,简称为 ANSI)于1968年发布了著名的ASCII编码标准(American Standard Code for Information Interchange,美国信息交换标准码)[14]

ASCII 是单字节编码,即用1个字节(8位)来编码英文字母(最前面的1位是 0,用于奇偶校验),也就是说,将英文字母和一些常用的字符用7位来对应,有128(2^7)个不同的组合。比如说大写字母“A”对应的十进制数字为“65”,对应的二进制为 “01000001”,转换成十六进制为 “0x41”。

大家把 ASCII 看作最原始的(当然还有更早的,但是我们没有必要知道)编码格式。由于我们现在常用的字符数(emoji 之类的也是字符)远远多于 128,所以现在几乎没人直接使用 ASCII 编码了。另外,目前所有新的编码全都兼容 ASCII

ASCII字符代码表


全文参考文献

[1] CSDN. 你真的懂Unicode和UTF-8是什么关系吗?来看看这个就彻底懂了![DB/OL]. (2018-11-19). https://blog.csdn.net/zhusongziye/article/details/84261211
[2] CSDN. Unicode和UTF-8的关系[DB/OL]. (2022-11-23). https://blog.csdn.net/song854601134/article/details/127994299
[3] 博客园. Unicode和UTF-8的关系[DB/OL]. (2019-05-12). https://www.cnblogs.com/tsingke/p/10853936.html
[4] 知乎. Unicode和utf8的关系是什么?[DB/OL]. (2022-10-30). https://www.zhihu.com/question/274104168/answer/2737298850
[5] 成都信息工程大学. 网页编码UTF-8,GBK,GB2312的区别[DB/OL]. (2015-10-17). http://jszx.cuit.edu.cn/NewsCont.asp?type=1009&id=20573
[6] 曹晖.字符集与字符编码标准[J].西北民族大学学报(自然科学版),2006,(03):36-42.
[7] CSDN. ANSI是什么编码?[DB/OL]. (2022-06-12). https://blog.csdn.net/weixin_38293850/article/details/125248400
[8] CSDN. ANSI和UNICODE编码区别[DB/OL]. (2022-08-20). https://blog.csdn.net/u010164190/article/details/126433688
[9] CSDN. ANSI是什么编码?[DB/OL]. (2020-08-07). https://blog.csdn.net/Liuqz2009/article/details/107861408
[10] JOEL SPOLSKY. The Absolute Minimum Every Software Developer Absolutely Positively Must Know About Unicode and Character Sets[DB/OL]. (2003-10-08). The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) – Joel on Software
[11] 腾讯云开发者社区. 编码、R与Windows(一) [DB/OL]. (2020-10-23). https://cloud.tencent.com/developer/article/1727834
[12] Computers & Writing Systems. Understanding Unicode [DB/OL]. (2001-06-13). http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter04a
[13] Computers & Writing Systems. Character set encoding basics [DB/OL]. (2001-06-13). https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03
[14] 知乎. 字符集编码(一):Unicode之前 [DB/OL]. (2023-04-24). https://zhuanlan.zhihu.com/p/468843643
[15] 知乎. UTF-8到底是什么意思?uicode编码简介 [DB/OL]. (2020-05-03). https://zhuanlan.zhihu.com/p/137875615
[16] CSDN. Unicode编码详解(四):UTF-16编码[DB/OL]. (2022-02-12). https://blog.csdn.net/hyongilfmmm/article/details/112046816
[17] CSDN. ANSI、MBCS、UNICODE字符集[DB/OL]. (2020-05-23). https://blog.csdn.net/fenghaiyang198848/article/details/106301653
[18] Microsoft文档. 支持多字节字符集 (MBCS) [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/text/support-for-multibyte-character-sets-mbcss?view=msvc-170
[19] Microsoft文档. Unicode 和多字节字符集 (MBCS) 支持 [DB/OL]. (2023-04-03). https://learn.microsoft.com/zh-cn/cpp/atl-mfc-shared/unicode-and-multibyte-character-set-mbcs-support?view=msvc-170
[20] CSDN. ANSI、MBCS、UNICODE字符集 [DB/OL]. (2020-05-23). https://blog.csdn.net/fenghaiyang198848/article/details/106301653
[21] Charles Petzold. Windows程序设计(第7版)[M]. 北京: 清华大学出版社, 2000.
[22] UNICODE官网. About the Unicode Consortium [DB/OL]. https://home.unicode.org/about-unicode/
[23] UNICODE官网. Unicode标准:技术介绍 [DB/OL]. (2019.08.23). https://www.unicode.org/standard/principles.html
[24] UNICODE官网. Unicode15.0.0 [DB/OL]. (2022.09.13). https://www.unicode.org/versions/Unicode15.0.0/
[25] CSDN. Unicode了解一下:码位分布[DB/OL]. (2018.04.21). https://blog.csdn.net/oyji1992/article/details/80030366
[26] Microsoft文档. 字符集 [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/windows/win32/intl/character-sets
[27] 博客园. 汉字编码之GBK编码[DB/OL]. (2020-11-05). https://www.cnblogs.com/Malphite/p/13931511.html
[28] CSDN. 汉字编码之GBK编码(附完整码表)[DB/OL]. (2016-03-04). https://learn.microsoft.com/zh-cn/windows/win32/intl/character-sets
[29] Microsoft文档. SBCS 和 MBCS 数据类型 [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/sbcs-and-mbcs-data-types?view=msvc-170
[30] Microsoft文档. Unicode 和 MBCS [DB/OL]. (2023-06-16). https://learn.microsoft.com/zh-cn/cpp/text/unicode-and-mbcs?view=msvc-170

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值