作者LPH66 (IWH68S0XZ8M89)
看板Programming
標題Re: [問題] VC2005 挪擖X為亂碼
時間Tue Nov 20 23:36:50 2007
※ 引述《meltice (三億兩千萬大散戶)》之銘言:
: 這樣寫完全沒錯
: 錯的應該是notepad
: 剛剛我照你的程式執行一遍
: 文字檔大小20byte
: 用notepad打開變成一堆方塊
: 可是用UltraEdit開卻正常
: 然後我直接在notepad照著打
: 0 1 2 ...
: 然後存檔
: 再打開
: 果然變成一堆方塊
: 接著我無聊再玩一下
: 只要最後不要打TAB或是打兩個TAB
: 存檔
: 就沒有這個問題
: 好神奇啊
: 怎麼會這樣???
: 不過如果存檔成unicode就沒有以上說的問題了
這是notepad誤判編碼....
0<Tab> 以16進位看是 0x30 0x09
如果看成Little endian的16-bit的話 它是0x0930
同理 1<Tab> 會看作 0x0931
而Unicode的U+0900~U+097F是Devanagari印度文
於是notepad看到如果解釋成Unicode 全篇都是印度文字 OK
就判斷它是少了BOM的Unicode編碼了
如果你在後面再加一個10<Tab> 因為它打亂了這個關係
notepad看到它認為的下一個字是U+3031 是個像ㄑ的符號
這已經不是印度文了 所以它判斷這個是ANSI編碼
就一切正常
多一個或少一個Tab也正常的原因也是因為打亂了關係
--
至於不會判斷成Unicode Big Endian的原因...
因為這樣看的話會出現U+3400以後的Extension A的字元集
顯然是不對的
--
話說我用的Notepad2也會誤判...
--
"LPH" is for "Let Program Heal us"....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.91.5
※ 編輯: LPH66 來自: 140.112.91.5 (11/20 23:37)
※ 編輯: LPH66 來自: 140.112.91.5 (11/20 23:38)
推 Arton0306:推 太神了! 123.195.50.65 11/21 00:30
→ buganini:都嚕都嚕大大大 221.169.71.109 11/21 02:26
推 ledia:推 140.112.30.56 11/21 14:51
→ meltice:那為什麼UltraEdit不會誤判 60.245.94.27 11/23 23:37
→ meltice:看來判斷編碼應該很複雜吧 60.245.94.27 11/23 23:38
→ meltice:只是UltraEdit太過聰明了 它會自動把UTF8 60.245.94.27 11/23 23:38
→ meltice:編碼的檔案轉成Unicode 這樣我無法從 60.245.94.27 11/23 23:39
→ meltice:HEX mode看出這個檔案究竟是不是UTF8編碼 60.245.94.27 11/23 23:40
→ meltice:不過還好可以關閉自動轉換UTF8功能 60.245.94.27 11/23 23:43
→ meltice:但是這樣一來就無法正確顯示UTF8檔案 60.245.94.27 11/23 23:43