Windows環境下的編碼、Unicode和UTF、如何解決亂碼?

難得能花時間研究那些以前一直很想深究,卻沒時間研究的問題。

這些問題坊間補習班好像也不會教,不然問同事就有答案了。

但編碼問題卻是工作上常常讓人困住的問題。

因而覺得這個學習,對工作上解決問題有很大幫助。

曾經靠著對file stream、byte和encoding的了解,解決了當npm都未提供適用的編碼工具時,自己透過控制input stream和output stream的encoding,完成編碼小工具;另外,當有人跟你說「DB取出來的值都用string取出是最輕省的,因為底層都是靠字串在傳資料的。」=> 馬上就可判斷這是錯的:因為所有資料在底層都是0和1。

更多例子就不多說了,簡言之,學習編碼相關知識,能讓自己得到解決很多問題的能力。


第1篇:Windows環境下的編碼:
在正體中文 Windows 中預設的編碼為 MS950,而因記事本是內建的,所以通常會使用OS的預設編碼。在 MS950 編碼中,中文字是用兩個位元組來儲存,MS950 可視為Big5的擴充。

Big5中如何分辨中、英文呢?Big5為與ASCII相容,規定:第1byte範圍在0xA4~0xF9;第2byte範圍在0xA1~0xFE,兩個組成後成為1個中文字。

=> 因而,當讀到第1byte範圍不在0xA4~0xF9,則可判定非中文。


第2篇:Unicode和UTF:
什麼是BOM
    BOM = byte order mark,就是用來識別檔案是用什麼byte順序。
    如果讀取檔案開頭的 BOM 0xfeff,表示檔案採用 Big Endian:當要儲存2個以上的byte資料時,採「先存高位元、再存低位元」方式。
    如果讀取檔案開頭的 BOM 0xfffe,表示檔案採用 Little Endian:當要儲存2個以上的byte資料時,採「先存低位元、再存高位元」方式。

UnicodeUTF關係是什麼?
    Unicode是以1個字元對應1個數字,這數字稱為「碼點」(Code point)。e.g. U+7287」表示為「犇」。而這碼點在電腦中如何用byte來實作則有不同的方式,Unicode 的實作方式就稱為 Unicode/UCS Transformation Format,簡稱 UTF


第3篇:如何解決亂碼:
看完連結,可將「出現亂碼」拆分成幾個斷點:

原始檔本身使用的編碼:用正確的編碼打開才不會是亂碼。

編譯時用的編碼:在OSIDE環境下編譯有時會是不同的。

輸出時用的編碼:在OSIDE環境下輸出有時會是不同的。



留言

熱門文章