关于字符的一些看法

字符真是个令人头疼的东西,弄不好就乱码了。呵呵,所以就花了大半天自己梳理了下。嘿嘿。

1 Ascii 码

学过电脑的都知道,电脑中的数据存储和运算都是靠比特流进行的,也就是0,1组成的二进制代码串。但是我们不可能输入0,1这些东西到电脑里把,根本记不住啦。所以,需要把输入的东西转为那些二进制代码。这时,美国人就制定了一个叫Ascii码的东西,Ascii码就是8位二进制代码(通常用7位),8位可以表示256个不同的字符了。英文用用早就够了。顺便说一句,英文字符都是单字节的,也就8个位把,汉字是双字节或多字节的。

2 Ascii码的问题

但是随着互联网的扩张,就出现了2个问题。1. 256个字符根本不够用啊,像中文这么多字,遇到Ascii就呵呵了。2. 还有就是不同的编码代表了不同符号。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。

3 Unicode

因为存在许多编码方式,所以同一段2进制代码可以被解释成不同的语言。所以打开一个文件,必须知道文件的编码格式,才能正确打开文件,不至于乱码。就比如html,中有个meta标签,charset=utf-8 就是用来表明文件的编码声明是utf-8,当然保存的时候,文件也要保存成为utf-8格式,这样,浏览器拿到这个html的时候,就知道用utf-8去解析这个html了。但是假如申明了charset=utf-8但是保存的时候用了别的编码格式,如ASCII.就会乱码了。说白了就是一个文字-》二进制(编码),二进制-》文字(解码,浏览器来解码),编码格式与解码格式需一致。

4  Unicode的问题

unicode有啥问题嫩?应该是存储东西把。汉字一个2个字节,16位,unicode要用到2个字节,这没问题。但是假如把unicode都设置为2个字节的话就太浪费啦。因为英文字母都是一个字节的,用 2个字节存储的话,前面一个字节都要填0了,空间就增大了1倍。

5 UTF-8

这个时候UTF-8就站了出来,解决存储的问题(utf-8是unicode的编码格式)。utf-8是可变的字节长度。对英文字母,它就是一个字节,对汉字,它可以变为2-4个字节。棒棒哒。另外还有个叫BOM的东西,把字符转为16进制的时候可以看到,比如把我在utf-8编码的情况下转为16进制,就是 EF BB BF E6 88 91,假如用无BOM的情况保存的话,就是E6 88 91.

就这样把,希望大家多多指教~~~~

参考文献:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html?20151227141854#comment-last

       http://www.joelonsoftware.com/articles/Unicode.html

     http://cenalulu.github.io/linux/character-encoding/ 

原文地址:https://www.cnblogs.com/wz0107/p/5080730.html