编码-Unicode、CodePage、ASCII和其它

Joel Sposkley的这篇文章,https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/ , 谈了字符和编码,如果你对unicode、code page、ASCII这些不是很明白,值得一读。

我在这里做点记录:code point就是字符对应的数字,属于定义的范畴;encoding就是怎么表示数字的问题,属于表示的范畴。一个code point,如122,可以有多个表示,可以用ASCII,可以用UTF-7,还可以是UTF-8或者UTF-16,还可以是你自己的编码规则。


提一个问题:那我们说ASCII码的时候究竟是encoding还是code point呢?是encoding,对应的code point是0至127的数字。用7位就够了,计算机的byte大部分是8bits的,有一位浪费了,所以大家都想把高128个code point利用起来,因为语言的不同,各国对高128位的定义是不同的,结果就是各种不同的code page,不同的Code Page,表明高128字符不一样。


关于UNICODE。Unicode只有唯一的code point表,需要注意的是UCS-2和UTF-16不同的。UCS-2最多表示65536个字符,不够;UTF-16和UTF-8一样长度是可变的,一个16 bits不够的时候就用两个,是用来补漏的。目前UNICODE只涉及到17个板块,每块最多65536个字符。UTF-16完全可以表示。Windows最早只支持UCS-2,后来在Windows 2000中完全支持UTF-16。

最后重提一下原文中最重要的一点:There Ain’t No Such Thing As Plain Text.(光给一串字节不给编码都是耍流氓


参考:

https://en.wikipedia.org/wiki/Unicode

https://en.wikipedia.org/wiki/UTF-16

https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值