為什麼Windows中文默認使用GB18030而不是UTF-8?
經常因為文字編碼問題導致Windows的文本文件到其他系統(如OS X)上亂碼。為什麼Windows不默認使用通用標準UTF-8而是默認GB18030呢
UTF-8 比 Windows 發明的晚,而且還牽涉到 9x-NT 對立的問題。NT 開始內碼是 UTF-16LE(早期幾個版本是 UCS2,因為當時 UTF-16 也沒發明),默認外部編碼則根據用戶語言選擇。
另外作為一個看過 18030 紙質版標準(這是本書,厚度在 2cm 左右)的人我告訴你,18030 實際上也是一種 UTF,裡面滿篇的 GB13000(等效 ISO10646) 引用……相關的認證也只要求可以正確處理 18030 編碼的文件、顯示文字等。
因為UTF-8/Unicode發明的晚
早期的中文Windows是用GBK的,GBK是微軟對GB2312的擴展。GB2312是「國標」,在80年代就有了,而Unicode晚到92年才開始收錄中文字元。
GB18030也是GB2312的擴展,但它和GBK的擴展方向不太一樣,GBK主要是充分利用了GB2312的一些沒定義的編碼空間,而GB18030用了全新的1/2/4位元組變長編碼(所以Belleve的回答會說GB18030也是一種UTF,不過這個說法不是非常嚴謹,望文生義看的話,Unicode Transformation Format,要表達Unicode的才算UTF)。
但GBK和GB18030的優點都是對GB2312基本上是完美兼容,這一點是Unicode/UTF完全沒法比的。Windows這種對於向後兼容要求非常變態的軟體,GBK和GB18030這條路線就非常合適了。
另外有一個額外的好處是,GB18030設計也很優異,對於絕大多數中文字元,它用2位元組,而UTF-8要用三位元組,這使得保存和傳輸中文文檔的時候GB18030是比UTF-8節省體積的。
事實上,只有在你用cmd或者處理不帶BOM的文件的時候,才會涉及到這個問題。現在的windows程序,哪一個不是unicode編譯的。所以在遇到不帶BOM的文件的時候,他們的行為都是,問一下操作系統用戶自己設置的編碼是什麼——GB2312啊,就這麼辦!
有的軟體可能不讀Windows的設置,那就不要用他們。
本來這就是安裝的時候你自己選的。當然你並沒有辦法不選就是了,所以這不是默認值。
微軟那麼多國際化版本軟體,中文windows默認用gb18030絕對是歷史原因無奈之選:
utf的標準基本上2000年左右才真正穩定下來,而gb2312可是上世紀80年代就被國家規定好了的,小時候玩的ccdos,ucdos都是這個標準執行的
微軟是上世紀90年代初就進軍中國市場的,當時gb2132是絕對標準,要推軟體本地化,必須遵守這個標準。而微軟的軟體的設計風格是必須向後兼容,在此期間,gb2312-&>gbk-&>gb18030一直向後兼容,成了絕配。。有了gb,就很難在一個HTML或者TXT里寫下多種語言的內容了。如過真如樓上所言,國家強推gb18030,敢tm用utf8的公司全部取締,所有電腦上軟體不得支持utf8,那就有意思了~絕對比GFW還給力!堪比所有電腦捆綁綠壩!到時候還翻個屁牆啊,出去看到的網頁上只要是中文絕大可能是亂碼……因為以前的軟體都是默認用當地編碼,沒辦法一夜之間全部換成Unicode,於是就只有軟體手動說明我要用Unicode或者文件開頭有簽名才用Unicode。這個問題應該改為,為什麼Windows記事本默認編碼不改成UTF-8。
1. 如果是英文版的Windows,則UTF-16LE(小端序)編碼的文本文件可以在Notepad(記事本)里正常打開,但GB 18030的則會亂碼。這就說明Windows默認的編碼是UTF-16LE,而不是GB 18030。Windows編程里的wchar_t、LPWSTR和結尾帶「W」的API函數等,指的都是UTF-16LE。所以你這個問題根本不成立。2. 如果題目默認指的是簡體中文版Windows,那麼在不支持Unicode的情況下,系統會使用ANSI編碼,這個編碼是隨Control PanelClock, Language, and RegionRegion的Administrative選項卡中Language for non-Unicode Programs而變化的,在Chinese (Simplified, China)下才是GB 18030,如果換成繁體中文就可能是BIG5了,等等。3. UTF-8和Unicode的關係可以看作是編程里經常說的實現和聲明的關係。而且Unicode的實現方法還不止UTF-8一種,還有UTF-16、UTF-32等等,UTF-16又還可以再分成LE和BE(大端序),總共算下來可以有四五種,你拿UTF-8當成Unicode唯一的實現方法明顯是以偏概全。你說Unicode是「通用標準」倒還說得過去,你把UTF-8說成是「通用標準」,那恐怕是你Linux或macOS用多了吧。
GB是國家標準,必須用,沒轍
不過好在GB18030也是一種UTF
這個問題本身就是錯誤的,只有中文版windows才是使用gbk作為默認編碼的,日文版默認使用日文編碼,歐版默認使用西歐字元,而且默認編碼是可以在控制面板里更改的,你要改成utf8也是可以的。在控制台里也是可以單獨修改字元編碼的比如用chcp 65001就變uft8了。至於為什麼各windows語言版本不使用utf8做為默認編碼,這完全是歷史遺留問題啊。當然也怪微軟態度不夠堅決,如果在windows2000出來的時候堅定使用utf8做為默認編碼,經過這10幾年下來也就不存在亂碼問題了,可惜微軟沒有作出正確的選擇。
放心吧,就算拿Windows記事本保存為UTF-8照樣在OSX亂碼,但OSX支持GB18030
utf8還真不是通用標準,國標GB才是標準呢。
處理海量中文文字信息的存儲的sns基本都不會選擇utf8, 一個漢字3-4位元組,浪費存儲。
對於中國人來說,gb18030是一種更好的選擇,拋開存儲位元組問題,gb18030的字的排序,是根據漢語拼音來的。也就是說,如果你要找一個漢字文件名的文件(夾),可以根據其拼音,快速找到。
反之,utf8,嗯,如果你的大腦能存下那些編碼,估計,也會有類似效果。
這個說法是很不準確的,GB18030是2000年的國標,而unicode真正流行起來也是2.0(97年),3.0(99年)之後。
早期的人windows既不使用18030,也不是unicode,早期的win95, win98就都是要分字符集安裝的,簡體是gbk(微軟code page 936)(gbk是微軟擴展國標2312搞出來的標準,後續18030也是在微軟事實標準gbk上擴展),繁體是big5,西歐一坨iso8859 1到15,日文韓文等等,各不兼容。
而nt系列操作系統,至少nt4是沒有18030的,exchange 5.5也發不了這個字符集的郵件,這些都是兩千年之前的產品。
而後續的windows,雖然運行時是unicode了,但仍然保留了本地locale關聯字符集的這個操作方式,你寫出來的文本文件根據系統設置而保存為了18030編碼,其實你可以保存時另存為unicode格式,應該就不會亂碼了。因為GB是國標的拼音首字母
GB18030是在中華人民共和國境內所有軟體產品,強制性標準。
由中國國家標準化管理委員會發布的
http://www.sac.gov.cn除了中國大陸,台灣,日本,韓國都有類似標準。還有很多國家都有。
數字是在Windows代碼頁編號。20936 —簡體中文(GB2312)936 —簡體中文(GBK) 54936 —簡體中文(GB18030) 950 —繁體中文(大五碼) 932 —日文(Shift_JIS) 949 —韓文(EUC-KR)
所以才會出現亂碼的現象。
其實一直都想改變。比如說成立了中日韓統一表意文字(英語:CJK Unified Ideographs),也稱統一漢字目的是要把分別來自中文、日文、韓文、越南文、壯文中,起源相同、本義相同、形狀一樣或稍異的表意文字。結果皆認為自己是漢字的正統,無法真正的統一起來。比如說你下載軟體line。就會發現裡面有些漢字長得不太一樣。比如說戶上面是一個橫,不是一個點。為什麼富蘭克林不用Windows來辦公?
兩個原因,utf8出來的比windows晚,用GBK是為了兼容之前的老程序,第二GBK一個中文字2個位元組而utf8一般是3個到6個位元組,用GBK性能更好
通用標準UTF-8這可不對,所以這個問題無效
1.windows(默認)文字編碼應該是UTF-16LE,相比UTF-8這個更適合亞洲國家。
2.之所以看到GB18030,是因為中國大部分人在區域語言中選擇了中文-簡體。這是本地化的國家標準。
原因簡單來說有二。一是歷史原因,字符集的發展。早期的windows系統及應用用的是GBK,GB2312等。而為了對以前的系統及應用兼容,GB18030就得繼續使用~二是政策原因。GB18030是國家強制標準。雖然很多企業跟軟體都忽略了,但這是GB,強制標準~等某天天朝說必須嚴查,那麼很多軟體目測就要被罰或者下線~
推薦閱讀:
※win10總是很快自動休眠怎麼解決?
※為什麼Windows XP 經歷了5年微軟才推出下一代 Windows?
※如何看待很多PC用戶在一段時間之後將win8/8.1刷回win7?
※為什麼「回收站」可以「永存」於 Windows 系統中?
※windows下文件路徑太深,刪除不了,有沒有解決方案?
TAG:MicrosoftWindows | 操作系統 | UTF-8 |