iOS 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

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

人已赞赏
iOS文章

ios 证书出现 “has one iOS Distribution certificate but its private key is not installed

2020-2-13 17:03:45

iOS文章

iOS WKWebView 点击链接没反应

2020-2-13 18:22:58

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索