首先閱讀此文之前,最好閱讀 http://hi.baidu.com/maml897/blog/item/324bf86369961ed4e6113a5c.html
http://hi.baidu.com/maml897/blog/item/fa5f0a7e1edef00129388ae2.html
其次還要知道一點常識,就是我們在記事本等一些文本工具中 寫的都是字符,沒有誰會去寫字節(可以寫字節,但是要用具特殊的編輯器),但是其實,我們的寫的是字符,但磁盤上真實存儲的是字節。
這里就出現了轉換的問題,當然,這些問題記事本本身會幫助我們解決。我們打開一個記事本,然后文件--另存為,你會發現有幾種存儲格式供您選擇, ANSI格式:就是ascii的格式 Unicode格式:采用國際通用的編碼存儲 Unicode big endian格式:這個和unicode有點區別,但我也不明太具體的不同 UTF-8:采用utf-8存儲,看過上面的兩篇文章,你會十分的了解這里介紹的編碼。Utf-8,是unicode的一種實現方式。
例如我們在記事本里面輸入“連通”兩個字。
1.我們另存記事本的時候,采用unicode存儲,那么雖然我們看到的字符還是“連通”,但是其實存儲在磁盤上的字節 確實 8FDE(連) 901A (通),這個是規定的,unicode是國際上規定的,給世界上的每個字符分配的唯一編碼。獲取某個字符的unicode的方法,可以去網上查找,最簡單的方法,就是打開word文檔,輸入字符,把光標移動到字符后面,按alt+x,word會自動把字符轉換成unicode編碼,這里呢我們也可以看到,用unicode存儲漢字啊,每個漢字占用兩個字節。
2.我們另存記事本的時候,采用utf-8存儲,雖然我們看到的字符還是“連通”,但是其實存儲在磁盤上的字節 確實已經變化了,這時候存儲的是 E8 BF 9E (連)E9 80 9A(通)。這就是utf-8的存儲的編碼,至于utf-8為什么這樣存儲,你可以閱讀上面的兩篇文章來了解,可以看到,utf-8使用3個字節存儲一個漢字。
另外我們還要知道的就是:電腦怎么區分一個記事本是用什么存儲的呢? 換句話說,為什么我用unicode存儲的8FDE(連) 901A (通),電腦就知道這是unicode編碼,從而使用unicode解碼,還原為“連通”呢?電腦又怎么知道E8 BF 9E (連)E9 80 9A(通)這是按照utf-8的存儲方式存儲的呢?
這里有一點標記,就是在存儲字節的時候,記事本首先在最前面 標明,這個記事本下面的存儲格式 是utf-8,還是unicode。
例如,
1.unicode存儲“連通”。磁盤字節真實存儲的其實是:
FF FE 8FDE 901A
前兩個FF FE是標記,告訴電腦,這個文檔的存儲方式是unicode
2.utf-8存儲“連通”。磁盤字節真實存儲的其實是:
EF BB BF E8 BF 9E E9 80 9A
前三個EF BB BF 告訴電腦 這個文檔是utf-8存儲的
根據不同編碼的特點和標志,對一個文本文件判斷編碼方法如下 1 . UTF7 所有字節的內容不會大于127,也就是不大于&HFF 2 . UTF8 起始三個字節為"0xEF 0xBB 0xBF" 3 . UTF-16BE 起始三個字節為"0xFE 0xFF" 4 . UTF-16LE 起始三個字節為"0xFF 0xFE"