[闻缺陷则喜]编码与实现方式

简介: [闻缺陷则喜]编码与实现方式

人类记忆字母、数字、汉字、符号需要记住读音或笔顺;计算机制只需要记录编号。


ASCII码

文本编码方式的基础是ASCII码,它是一个7位的编码标准,包括26个小写字母、26个大写字母、10个数字、32个符号、33个控制代码和一个空格,共128个代码。其中ASCII码是大多数常用编码的基础。


ANSI

ANSI(美国国家标准协会)通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。在简体中文Windows操作系统中,ANSI 编码代表 GB2312编码(国标码),GBK是GB2312的扩展;在繁体中文Windows操作系统中,ANSI编码代表Big5(大五码);在日文Windows操作系统中,ANSI 编码代表 JIS 编码。


一个汉字可能同时存在于GB2312、Big5、JIS中,他们的编码不一定相同。“就”在GB2312中的编码是{ 0xbe, 0xcd },在Big5中是{ 0xb4, 0x4e }。“義”在GB2312的编码是{ 0xc1, 0x78 },在Big5中是{ 0xb8, 0x71 }。由于是先有繁体字后有简体字,所以GB2312中有许多繁体字,Big5中我暂没发现简体字。


GB2312和Big5除ASCLL码一个字节外,其它都是两个字节。GB2312,范围:0xA1A1(41377) - 0xFEFE(65278),汉字范围:0xB0A1(45217) - 0xF7FE(63486)。Big5码,“高位字节”使用了0x81-0xFE,“低位字节”使用了0x40-0x7E,及0xA1-0xFE。


Unicode

Unicode,万国码、统一码,可以同时支持多国语言。


实现方式

目前(2021年8月)有99089个字符,其中包括71226个汉字。2个字节最多只能表示6万多个字所以需要4位。


UTF32,所有字符都是4个字节。


UTF16大部分字符(往往是常用字符)2字节,少量4字节。Unicode标准规定U+D800..U+DFFF不对应于任何字符,所以以D8到DF开头的是4字节,否则是2字节。


UTF8理论上最多需要6个字节,目前需要1到4个字节。除首字节外,其它字节前两个二进制位一定是10。只需要1个字节时,首字节第一个二进制位一定是0;需要两个字节时,首字节前3个二进制位一定是110;需要三个字节时,首字节前4个二进制位一定是1110;需要四个字节时,首字节前5个二进制位一定是11110。1个字节有7个有效二进制位,2个字节有11个二进制位,3个字节有16个二进制位,4个字节有21个二进制位。


转换

C#利用System.Text.Encoding类转换。string、char是小端utf16编码。C++用MultiByteToWideChar和WideCharToMultiByte。gb2312和buf8是多字节(char),utf16是宽字节。VC中多字节是gb2312编码,宽字节是小端UTF16编码。测试环境:Win7+VS2012。


相关文章
|
JSON 算法 安全
【闻缺陷则喜】避错设计
【闻缺陷则喜】避错设计
|
XML 数据格式
[闻缺陷则喜]关于boost的想法
[闻缺陷则喜]关于boost的想法
|
6月前
|
Java Python
编码之舞:从混乱到秩序的旅程
【6月更文挑战第3天】在数字世界的无限可能中,编程不仅仅是一种技术实践,它是一场思维与逻辑的舞蹈,是创意与结构的和谐交响。本文将带领读者穿梭于代码的海洋,探索如何将混沌的想法转化为清晰、高效的程序,揭示那些隐藏在平凡代码行背后的深刻见解和创造性解决方案。
|
7月前
日拱一卒,月进一步(3)
27. 移除元素 - 力扣(LeetCode) 令人惊讶的是,这一题竟然答题答过,但我没有丝毫印象,啊,该死啊。
50 1
|
7月前
日拱一卒,月进一步(2)
那么,很快就来到了第二题的学习。哈哈~ 26. 删除有序数组中的重复项 - 力扣(LeetCode)
48 1
|
7月前
|
算法
日拱一卒,月进一步(8)
136. 只出现一次的数字 - 力扣(LeetCode) 这个题目一出现,我就立马有了思路。其实就是让每个数字互相异或,最后得出的数字就是只出现一次的数字。
44 1
|
7月前
日拱一卒,月进一步(4)
66. 加一 - 力扣(LeetCode) 思路: 数字加法应该从前向后遍历,因此我们应该从数字末尾从后向前遍历。如果数字不为9,则直接在末尾+1。如果末尾为9,那么将其变为0,并且在下一位+1。如果一直遍历都为1,那么在数组第0位插入1。
40 1
|
7月前
|
存储
日拱一卒,月进一步(7)
121. 买卖股票的最佳时机 - 力扣(LeetCode)
43 1
|
7月前
日拱一卒,月进一步(12)
485. 最大连续 1 的个数 - 力扣(LeetCode)
47 1

相关实验场景

更多
下一篇
DataWorks