Windows 記事本的 ANSI Unicode UTF 8 這三種編碼模式有什麼區別?

時間 2021-05-05 17:38:33

1樓:ShirleyRyan

梁海的答案裡不推薦使用BOM,但是無BOM的utf8和gbk在只有英文本母時是完全一樣的,系統如何區分?如果你說不用區分,那檔案又新增了漢字該怎麼辦?

2樓:阿哲

ASCII是古老的編碼,那個時候還不區分字符集和編碼,基本可以看作合二為一的東西。

Unicode嚴格來說是字符集,可以有多種編碼。

UTF-8是一種Unicode的編碼。

相容性最好的,我記得好像是UTF-8不帶BOM頭。

注: 字符集(char set)就是字元的集合,收錄了一定數量的字元。每個字元有對應的ID值,叫碼點(code point)。

實際儲存的時候,不一定是直接儲存字串的碼點(比如,為了節約空間),要進行轉換。這個轉換規則就是編碼。

3樓:韓曙

基本的問題是:非英文本元需要擴充套件只支援英文的ASCii編碼。

ANSI:泛指最早每種國家語言各自實現的擴充套件編碼方式,各個編碼互相之間不相容,比較省空間。

Unicode:一套抽象的相容所有常用語言的編碼方式,但是不適合計算機系統直接儲存。

UTF-8:一種將unicode轉換成適合計算機儲存的方式,

相對其他的UTF-xx省空間,同時又可以和ASCII混用,結構相對複雜,底層處理相對慢。

UTF-16,UTF-32:另外的unicode儲存編碼,結構簡單,不能和ASCII混用。

BOM:一種為了跨平台設計的檔案起始標記,但很多程式沒去處理這個,用了BOM反而常造成問題。

4樓:梁海

簡答。一些細節暫無精力查證,如果說錯了還請指出。

一句話建議:涉及相容性考量時,不要用記事本,用專業的文字編輯器儲存為不帶 BOM 的 UTF-8。

* * *

如果是為了跨平台相容性,只需要知道,在 Windows 記事本的語境中:

所謂的「ANSI」指的是對應當前系統 locale 的遺留(legacy)編碼。[1]

所謂的「Unicode」指的是帶有 BOM 的小端序 UTF-16。[2]

所謂的「UTF-8」指的是帶 BOM 的 UTF-8。[3]

GBK 等遺留編碼最麻煩,所以除非你知道自己在幹什麼否則不要再用了。

UTF-16 理論上其實很好,位元組序也標明了,但 UTF-16 畢竟不常用。

UTF-8 本來是相容性最好的編碼但 Windows 偏要加 BOM 於是經常出問題。

所以,跨平台相容性最好的其實就是不用記事本。

建議用 Notepad++ 等正常的專業文字編輯器儲存為不帶 BOM 的 UTF-8。

另外,如果文字中所有字元都在 ASCII 範圍內,那麼其實,記事本儲存的所謂的「ANSI」檔案,和 ASCII 或無 BOM 的 UTF-8 是一樣的。

* * *

阮一峰那篇〈字元編碼筆記:ASCII,Unicode和UTF-8〉的確很有名,但從那篇文章能看出來他其實還是沒完全搞清楚 Unicode 和 UTF-8 的關係。他依舊被 Windows 的混亂措詞誤導。

事實上,幾年前我讀完他那篇文章之後依舊一頭霧水,最終還是自己看維基百科看明白的。

所以,那篇文章不值得推薦。

* * *

關於字符集(character set)和編碼(encoding),某幾篇答案中似乎有些混淆。

對於 ASCII、GB 2312、Big5、GBK、GB 18030 之類的遺留方案來說,基本上乙個字符集方案只使用一種編碼方案。

比如 ASCII 這部標準本身就直接規定了字元和字元編碼的方式,所以既是字符集又是編碼方案;而 GB 2312 只是乙個區位碼形式的字符集標準,不過實際上基本都用 EUC-CN 來編碼,所以提及「GB 2312」時也說的是乙個字符集和編碼連鎖的方案;GBK 和 GB 18030 等向後相容於 GB 2312 的方案也類似。

於是,很多人受這些遺留方案的影響而無法理解字符集和編碼的關係。

對於 Unicode,字符集和編碼是明確區分的。Unicode/UCS 標準首先是個統一的字符集標準。而 Unicode/UCS 標準同時也定義了幾種可選的編碼方案,在標準文件中稱作「encoding form」,主要包括 UTF-8、UTF-16 和 UTF-32。

所以,對 Unicode 方案來說,同樣的基於 Unicode 字符集的文字可以用多種編碼來儲存、傳輸。

所以,用「Unicode」來稱呼乙個編碼方案不合適,並且誤導。

* * *

[1] Windows 裡說的「ANSI」其實是 Windows code pages,這個模式根據當前 locale 選定具體的編碼,比如簡中 locale 下是 GBK。把自己這些 code page 稱作「ANSI」是 Windows 的臭毛病。在 ASCII 範圍內它們應該是和 ASCII 一致的。

[2] 把帶有 BOM 的小端序 UTF-16 稱作「Unicode」也是 Windows 的臭毛病。Windows 從 Windows 2000 開始就已經支援 surrogate pair 了,所以已經是 UTF-16 了,「UCS-2」這個說法已經不合適了。UCS-2 只能編碼 BMP 範圍內的字元,從 1996 年起就在 Unicode/ISO 標準中被 UTF-16 取代了(UTF-16 通過蛋疼的 surrogate pair 來編碼超出 BMP 的字元)。

都十多年了,求求大家別再誤稱了……

[3] 把帶 BOM 的 UTF-8 稱作「UTF-8」又是 Windows 的臭毛病。如果忽略 BOM,那麼在 ASCII 範圍內與 ASCII 一致。另請參見:

「帶 BOM 的 UTF-8」和「無 BOM 的 UTF-8」有什麼區別? http://www.

5樓:

阮一峰解釋得不錯:http://www.

ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html1)ANSI是預設的編碼方式。

對於英文檔案是ASCII編碼,對於簡體中文檔案是GB2312編碼(只針對Windows簡體中文版,如果是正體中文版會採用Big5碼)。

2)Unicode編碼指的是UCS-2編碼方式,即直接用兩個位元組存入字元的Unicode碼。這個選項用的little endian格式。

3)Unicode big endian編碼與上乙個選項相對應。我在下一節會解釋little endian和big endian的涵義。

4)UTF-8編碼,也就是上一節談到的編碼方法。

Windows 的記事本為什麼不公升級?

向前跑 它的意義就是1 快速開啟,快速編輯,斷網也可以使用,及時電腦很卡,但不影響記事本的記錄 2 支援多種格式,修改字尾 3 時間記錄 4 快速查詢 沒有公升級的必要. OSX的文字編輯我都調整到純文字模式。用這個的目的就是簡單的記點東西而已。更複雜的有更專業的工具可以使用。個人認為公升級沒有必要...

如何看待《黑皮記事本》結局?

已登出 元子在那個老阿姨走了之後就直接做完家務就睡覺了?一天多的時間什麼都沒發現?就算事出匆忙的放進櫃子事後不可能不檢查一下而且明明就是一拉抽屜就知道的事情 那她一定是知道記事本在不在的那她既然知道記事本沒有了卻很奇怪的毫無行動等著第二天警察抓?享受最後的榮光?記事本被上交對她到底有什麼影響?記事本...

NOTE d 萌噠噠的記事本(i)

melon xu 這個沒有特定的時間,具體事情具體分析,一般時間在3周 4周,下面說說一些具體情況 1 重大bug 在上線之前,研發部會內部測一下版本,然後交給測試人員測試,最後產品經理再測一遍,確定沒有問題可以提交上線了,duang,上線後發現了乙個重大的bug,直接影響核心功能,那麼責任這塊是產...