我對windows記事本bug的解釋
這個bug在windowsXP sp1,sp2中都用,其他版本的windows是否有我沒試過,不過我估計windows2000和2003都會存在。
bug示範:
記事本建立一個文本,開啟以後輸入: 聯通 這兩個字, 儲存 ,關閉記事本。
再開啟,你看看變成什麼了?
有一個開玩笑的說法是因為中國聯通把微軟中國得罪了……
其實我看就是微軟中國那幫傢伙水平不行,對多語言編碼弄得不好造成的
我分析了一下原因,
記事本儲存的時候,預設使用ansi編碼
但是用ansi編碼呢,聯通這兩個字的開頭正好是:fffe..... 這樣的,於是再開啟呢,他就以為是utf-8編碼了,但是按照utf-8來解碼呢,卻造成亂碼了。
我解釋完畢,你滿意否?
之所以我會想起來解釋這個bug,是由於最近開發一個軟體涉及到一些編碼方面的問題,微軟windows這個bug弄得我的軟體產生的檔案到現在還無法正常移植到其他平台上。
呵呵
shinzeal |
2005-1-29 04:53 PM |
|
我再具體進行分析一下: 以下是“聯通”二字在不同編碼下的16進位代碼:FF FE 54 80 1A 90 (Unicode) FE FF 80 54 90 1A (Big Unicode) FF FE 54 80 1A 90 (UTF-8) FF FE 6A 00 68 03 (ANSI) 可以看出來,Unicode和UTF-8編碼下,聯通二字的編碼是一樣的,而Big Unicode是和Little Unicode(簡稱Unicode)正好相反的編碼方式,一般Intel體系的電腦用Little Unicode編碼效率較高。而檔案頭FF FE和FE FF則被微軟用來作為區分檔案是Little Unicode還是Big Unicode的標誌。同時呢,由於UTF-8也是緣於Unicode編碼方式的,微軟就在UTF-8編碼的檔案前面也加上了FF FE用來作為標誌。 可是這樣一來,用ANSI編碼儲存的檔案就出問題了,因為聯通二字的ANSI編碼正好是以FFFE開頭的,這樣以ANSI編碼儲存以後再次開啟,記事本首先檢測到FFFE,就認為是UTF-8編碼了,於是按照UTF-8編碼開啟以後就會顯示為亂碼。 利用這個原理,大家可以試試,找到以ANSI編碼儲存時開頭為FFFE的其他文字,同樣可以實現和 聯通二字在記事本中造成的bug一樣的效果 |