作者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)
1F:推 Arton0306:推 太神了! 123.195.50.65 11/21 00:30
2F:→ buganini:都噜都噜大大大 221.169.71.109 11/21 02:26
3F:推 ledia:推 140.112.30.56 11/21 14:51
4F:→ meltice:那为什麽UltraEdit不会误判 60.245.94.27 11/23 23:37
5F:→ meltice:看来判断编码应该很复杂吧 60.245.94.27 11/23 23:38
6F:→ meltice:只是UltraEdit太过聪明了 它会自动把UTF8 60.245.94.27 11/23 23:38
7F:→ meltice:编码的档案转成Unicode 这样我无法从 60.245.94.27 11/23 23:39
8F:→ meltice:HEX mode看出这个档案究竟是不是UTF8编码 60.245.94.27 11/23 23:40
9F:→ meltice:不过还好可以关闭自动转换UTF8功能 60.245.94.27 11/23 23:43
10F:→ meltice:但是这样一来就无法正确显示UTF8档案 60.245.94.27 11/23 23:43