2013年3月28日 星期四

寫入資料到txt檔,用Notepad打開顯示亂碼

今天碰到一個奇怪的問題,我有一個程式會產生一個.txt檔。內容為上千個0~255的數字由空白隔開。寫檔成功後在Windows XP底下用Notepad打開發現顯示為亂碼,但是用Notepad++以及Wordpad打開都可正常顯示。很明顯這是編碼的問題,不過為什麼會這樣讓我找了一陣子。最後發現是Notepad的問題。

Windows XP的Notepad有Unicode Detection的功能,Notepad使用一個Windows API叫IsTextUnicode()來偵測目前文字檔是不是Unicode編碼。但是這個API並沒辦法完美的辨認出Unicode,有時後會把ASCII text誤認為是Unicode編碼。比如說這段字串"aaaa aaa aaa aaaaa",如果你把他貼在Notepad上存起來再重新打開,你會發現他變成一團亂碼。原因就在於IsTextUnicode()把全部都是此ASCII text誤認為UTF-16。除了此case以外還有很多其他的case會造成誤判。而Wordpad以及Notepad++不會有此誤判的現象,因此可正常顯示。

沒有留言:

張貼留言