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

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

      1. ASCII

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

      1. ANSI

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

一个汉字可能同时存在于GB2312Big5JIS中,他们的编码不一定相同。“就”在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

      1. Unicode

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

        1. 实现方式

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

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

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

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

      1. 转换

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闻缺陷则喜何志丹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值