Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?
先來解釋一下這三種編碼的歷史吧:
ANSI:最早的時候計算機ASCII碼只能表示256個符號(含控制符號),這個字符集表示英文字母足夠,其中,我們鍵盤上可見的符號的編碼范圍是從32到126(大小寫英文字母、數(shù)字、英文符號等)。但表示漢字、日語、韓語就不太夠用了,漢字常用字有3000多個。
但是中國人也要用電腦打字,于是,中國人就研究出來了最早的中文字符集GB2312(GBK就是后來的擴展),GB2312的做法是,把ASC碼取值范圍的128~255這個區(qū)間挪用了一下,用兩個ASC碼表示一個漢字,這樣可用的編碼范圍用十六進制表示就是0x8080到0xFFFF,這大概能表示一萬多個符號,足夠了。[注:實際沒用那么多,GBK的范圍是8140-FEFE]
那個時候,計算機技術(shù)還不發(fā)達(dá),各個國家搞自己的,比如臺灣,也另搞了一套,叫BIG5(俗稱:大五碼),跟大陸的也不太一樣,但方法是類似的,都是用0x80到0xFF這個區(qū)間。
然后日語(有編碼JIS)、韓語等等也各搞一套。
這些國家的編碼區(qū)間都是重疊的,但同一個漢字(比如有一些漢字同時存在于簡體、繁體、日語漢字中)有不同的編碼,很混亂是不是?但也湊合用了。編碼不同導(dǎo)致了很多麻煩,比如一個網(wǎng)頁,如果你不知道它是什么編碼的,那么你可能很難確定它顯示的是什么,一個字符可能是大陸簡體/臺灣繁體/日本漢字,但又完全是不同的幾個字。
所以如果用一些很老的軟件,可能會聽說有中文版/日文版之類的,對應(yīng)的版本只能在對應(yīng)的系統(tǒng)上運行。
后來,這個對操作系統(tǒng)的開發(fā)實在是太困難了,因為這意味著不同語言的版本,都要重新編碼。于是發(fā)明了Unicode。
Unicode這個東西,就是要把地球上所有的語言的符號,都用統(tǒng)一的字符集來表示,一個編碼真正做到了唯一。
Unicode里有幾種方式:
UTF-16BE/LE:UTF-16就是Windows模式的編碼模式(Windows里說的Unicode一般都是指這種編碼),用2個字節(jié)表示任意字符,注意:英文字符也占2個字節(jié)(變態(tài)不?),這種編碼可以表示65536個字符,至于LE和BE,就是一個數(shù)值在內(nèi)存/磁盤上的保存方式,比如一個編碼0x8182,在磁盤上應(yīng)該是0x81 0x82呢?還是0x82 0x81呢?就是高位是最先保存還是最后保存的問題,前者為BE,后者為LE。
UTF-8:UTF-8則是網(wǎng)頁比較流行的一種格式:用一個字節(jié)表示英文字符,用3個字節(jié)表示漢字,準(zhǔn)確的說,UTF-8是用二進制編碼的前綴,如果某個UTF-8的編碼的第一個字節(jié)的最高二進制位是0,則這個編碼占1字節(jié),如果是110,則占2字節(jié),如果是1110,則占3字節(jié)……
好了,說了這么,再來研究Windows的記事本。
Windows早期(至少是95年以前的事情了)是ANSI字符集的,也就是說一個中文文本,在Windows簡體中文版顯示的是中文,到Windows日文版顯示的就不知道是什么東西了。
后來,Windows支持了Unicode,但當(dāng)時大部分軟件都是用ANSI編碼的,unicode還不流行,怎么辦?Windows想了個辦法,就是允許一個默認(rèn)語言編碼,就是當(dāng)遇到一個字符串,不是unicode的時候,就用默認(rèn)語言編碼解釋。(在區(qū)域和語言選項里可以改默認(rèn)語言)
這個默認(rèn)語言,在不同Windows語言版本里是不同的,在簡體中文版里,是GBK,在繁體中文版里,是BIG5,在日文版里是JIS
而記事本的ANSI編碼,就是這種默認(rèn)編碼,所以,一個中文文本,用ANSI編碼保存,在中文版里編碼是GBK模式保存的時候,到繁體中文版里,用BIG5讀取,就全亂套了。
記事本也不甘心這樣,所以它要支持Unicode,但是有一個問題,一段二進制編碼,如何確定它是GBK還是BIG5還是UTF-16/UTF-8?記事本的做法是在TXT文件的最前面保存一個標(biāo)簽,如果記事本打開一個TXT,發(fā)現(xiàn)這個標(biāo)簽,就說明是unicode。標(biāo)簽叫BOM,如果是0xFF 0xFE,是UTF16LE,如果是0xFE 0xFF則UTF16BE,如果是0xEF 0xBB 0xBF,則是UTF-8。如果沒有這三個東西,那么就是ANSI,使用操作系統(tǒng)的默認(rèn)語言編碼來解釋。
Unicode的好處就是,不論你的TXT放到什么語言版本的Windows上,都能正常顯示。而ANSI編碼則不能。(UTF-8的好處是在網(wǎng)絡(luò)環(huán)境下,比較節(jié)約流量,畢竟網(wǎng)絡(luò)里英文的數(shù)據(jù)還是最多的)
舉例:
同樣一段中文文本(可以插入一些英文),保存成ANSI/Unicode/UTF-8,三個文件。
修改windows的默認(rèn)語言為日語之類的(WIN7的改法是:控制面板-時鐘、語言和區(qū)域-更改顯示語言-區(qū)域和語言-管理-非unicode程序語言-更改區(qū)域設(shè)置/WNIXP改法是:控制面板-區(qū)域和語言選項-非unicode程序語言)。
修改完要求重啟,重啟以后,再打開這三個文件,ANSI的編碼全亂了,其余兩個都正常顯示,這就是UNICODE的作用。
另外,為什么記事本、開始菜單什么的還是正確的中文呢?明明我已經(jīng)改了默認(rèn)語言了?因為它們的程序編碼也是unicode的。
要把txt發(fā)給國外的朋友或者用在非中文的操作系統(tǒng)/軟件里,那么你的編碼最好選擇unicode
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样利用电脑摄像头录制视频如何用电脑摄像
- 下一篇: 电脑软件自动启动快捷键(电脑软件自动启动