我用记事本把一段文本保存到一个文本文件中,用的utf-8编码,然后用ultraedit以十六进制的方式打开文件,发现文件头有三个字节的标志,然后用ultraedit另存为一个文本文件,用utf-8无dom的方式,再用ultraedit十六进制查看,发现前面三个字节的标志没有了,但是用记事本打开之后还是显示用的是utf-8保存的。请问记事本是怎么分辨没有标志的utf-8文本文档的?

解决方案 »

  1.   

    http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
    学习一下。
      

  2.   

    微软做的东西有个特点,就是让你找不着北。很多时候我都能发现这样的疑问,为什么我做的不行,微软做的就可以?这是因为微软使用了一种TRY模式,我在微软泄漏的代码中发现了很多这种方式。一段文本,它可能会依次尝试多种解码方法,首先寻找BOM,如果有什么都好说,如果没有,它就进入TRY模式,可能调用IsTextUnicode来判断是否UNICODE编码,如果还不是,它会尝试按照不同编码来转换成UNICODE,如果完全成功,问题也解决了,如果还不成功,那就用默认编码,此时显示乱码它也没办法,但到最后一步的概率已经很小了。
      

  3.   

    我也想过。有可能是这样,对于无bom的文本,先按utf8格式进行检查,是否有非首选语言字符,如果有的话就按ansi来输出。对于一个无bom的文本来说,按utf8与按ansi进行检查,一般总会有一个结果会超出首选语言字符集范围。由于utf8的范围与unicode一样,所以猜想notepad默认按utf8来显示。