晚上写了个小程序测试了一下,终于弄懂了UltraEdit弄出来的UTF8格式,和微软弄出来的UTF8格式之间的区别了
比如说一个文本文件内容是“1啊”两个字符:
对于 GBK编码:31 B0 A1
对于unicode UCS-2 编码(不论记事本还是Ultaedit): ff fe 31 00 4a 55 (在Ultraedit二进制下看到的是一样的)
对于UltraEdit的“UTF8(unicode editing)” 的编码: 31 e5 95 8a (在Ultraedit下看到的是 FF FE 31 00 4A 55)
对于微软“记事本”另存为出来的UTF8的编码: ef bb bf 31 e5 95 8a (在Ultraedit下看到的是 FF FE FF FE 31 00 4A 55)
可以看出来,微软的UTF8编码其实是符合标准的,因为 ef bb bf 这三个字节,正好就是 FF FE 的UTF8编码。也就是说,看来是我们冤枉微软了,一直以为是Ultraedit出来的utf8标准而微软“记事本”出来的utf8不标准,其实正好相反。
参见
ultraedit forum
看来我手头的 UE9.0 是个很老的版本了。
现在就剩下一个问题:为什么svn不支持标准utf8,无法识别BOM呢?