我們常用的小工具,系統中附件裡的「記事本」工具,有個比較有意思的bug,讓我們按以下步驟來看看。
1. 在開始選單的附件裡開啟記事本
2. 複製引號中的內容,貼上到記事本裡「aaaa bbb ccc ddddd」
3. 把它儲存到桌面上,檔名任意,然後關閉記事本程式
4. 在桌面上開啟剛才儲存的檔案
現在看到的都是乙個個黑色的格仔。而剛才輸入的內容都不見了,是不是很有意思呢,我們再把記事本刪除,再貼上一下剛複製的內容,儲存並關閉記事本。再次開啟該檔案,現在又可以正常顯示檔案內容了,呵呵是不是很有趣呢。
在實驗中發現,如果開啟記事本,輸入「聯通」也可以達到同樣的效果,呵呵,我們可愛的記事本是不是非常有趣呢。
我對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一樣的效果
bink.nu**上的文章表示,微軟的記事本程式中又發現乙個有趣的bug。事情經過是:
1、開啟乙個記事本程式;
2、輸入:aaaa bbb ccc ddddd(或者任何其它4-3-3-5形式的字母組合);
3、儲存文件,關閉記事本;
4、再次開啟剛才儲存的文件,你會發現那些字母變成了9個矩形格仔(顯示效果:?????????
)。5、此外,把記事本中的格仔再次用剛才那些字母序列覆蓋,儲存並關閉記事本。再次開啟時,顯示的又是正確的字串行了。
老王的擴充套件:當進行完上述5步後,我想是不是這個bug只在新建文件時有效呢。於是我在第5步後用「ctrl+n」新建了乙個記事本文件,輸入那些字母,儲存為乙個新檔案,開啟它時現實的確是正確的。而經測試,只有在沒進行過上述1-3步操作的記事本文件中才有這個bug存在。比如在乙個已存在的文件中操作,或是到「開始-程式-附件」中啟動記事本操作,或是檢視網頁源**彈出的記事本中操作等。乙個文件一旦應用過本bug,即使在開啟它的視窗中新建乙個一般文件-儲存-開啟新建的文件,貼上/輸入上述字母也無法看到bug了。
所以這個bug確實很有趣,至於原理是什麼,估計得去問微軟設計記事本的那位老兄了。關於本bug存在於哪些系統中我沒有條件測試,反正我的系統是windows xp。
更新:monyer兄弟的解釋
這是個檔案編碼識別問題,我們第一次建立檔案儲存時使用的是預設ansi格式,通過開啟記事本,輸入以上字元另存為*.txt那個介面即可看見編碼方式。
但開啟的時候是按unicode編碼開啟的,我們再次輸入以上字元另存為*.txt,在另存為介面可以看到編碼方式已經更改了。
這個是記事本的智慧型化編碼識別問題,譬如ansi、unicode、unicode big endian、utf-8、utf-8 bom、gb2312、big5、ascii等。我們從來沒有意識到簡單的文字居然有這麼多編碼就是因為記事本程式的智慧型識別問題,但究竟程式設計師做這個智慧型識別用了什麼演算法就不得而知了,不過可以肯定的是不是簡單的fffe檔案頭識別就是了。
記事本的乙個bug
bug演示 記事本新建乙個文字,開啟以後輸入 聯通 這兩個字,儲存 關閉記事本。再開啟,你看看變成什麼了?我分析了一下原因,記事本儲存的時候,預設使用ansi編碼 但是用ansi編碼呢,聯通這兩個字的開頭正好是 fffe.這樣的,於是再開啟呢,他就以為是utf 8編碼了,但是按照utf 8來解碼呢,...
QT寫乙個記事本
qt寫乙個記事本 新增 編輯 一欄裡 時間日期 及 格式 一欄裡 字型 顏色 的功能 1.在mainwindow.h裡新增字型顏色時間等需要的標頭檔案 include include include include include 如圖 2.分別建立設定字型 設定顏色 獲得系統時間的槽 void s...
推薦乙個記事本程式 替代windows記事本)
這個程式的名字叫 notepad2 替換c windows 目錄下 c windows system32 目錄下 的notepad就可以了。注意 替換需要對目錄下的notepad.exe檔案進行 獲得管理員所有許可權 才可以正確的替換。滑鼠右鍵獲得管理員所有許可權的登錄檔查閱 下面截幾張圖分別是sq...