ascii unicode和utf8的区别和联系

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),一个二进制表示一个字符,这就是编码。

ascii:美国标准信息交换代码(American Standard Code for Information Interchange):英文里的字符比较少,0~9 a~z A~Z以及一些特殊字符,用一个字节就能表示完上面的那些字符,每一个字符用对应一个二进制编码(eg:0x01101011),这就是ascii编码。简单来说就是用一个字节来编码。

unicode:ascii是解决了英文编码,但是中文和其他文字呢,中文8000多个啊,一个字节2的8次方顶多就256个,怎么办?那就多加一个字节:2的16次方。(目前比较实用的unicode版本是用两个字节编码的UCS-2,unicode的版本还在不断更新中,详情见http://www.oschina.net/translate/whats-new-in-unicode-70)。

utf8:unicode能很好的覆盖了全世界的字符,但问题由来了,对于实用英文来说的多家就觉得亏了,原来一个字节表示的字符,现在需要两个字符表示,浪费硬盘和流量,所以他们又搞出了另一套编码:utf-8,英文的还是用一个字节表示,其他的用2到6个字符表示!对于其他语言的国家来说,这又不爽了,但没办法,毕竟计算机就是别人用英文的国家发明的,不爽也得用。


下面是转自知乎的:  uuspider   ,沉默并非无知 孤芳只为自赏
链接:http://www.zhihu.com/question/23374078/answer/65352538

计算机只懂二进制,因此,严格按照unicode的方式(UCS-2),应该这样存储:
I 00000000 01001001
t 00000000 01110100
' 00000000 00100111
s 00000000 01110011
  00000000 00100000
知 01110111 11100101
乎 01001110 01001110
日 01100101 11100101
报 01100010 10100101


作者:uuspider
链接:http://www.zhihu.com/question/23374078/answer/65352538
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


UTF-8是这样做的:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

这样就形成了如下的UTF-8标记位:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
... ...

于是,”It's 知乎日报“就变成了:
I 01001001
t 01110100
' 00100111
s 01110011
  00100000
知 11100111 10011111 10100101
乎 11100100 10111001 10001110
日 11100110 10010111 10100101
报 11100110 10001010 10100101

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值