如果这个encoding指的是xml/JSP/HTML文件本身的编码方式,那么,这个encoding应该是给应用程序“看”的,但是,如果应用程序不知道这个encoding,就不可能正确打开文件,读出这一句,而如果应用程序已经知道encoding,并因此顺利读出文件,则这个encoding就形同虚设了(除非它是个注释comment,但在xml/JSP/HTML文件中这显然不是一个comment)。
此外,还有一种可能,就是xml/JSP/HTML文件本身按照默认的编码方式进行编码(如中文Windows下是GBK),应用程序按照默认编码方式解码,读出文件内容,但在对读出的文件信息进行编码存储/传输时使用指定的encoding。但这种解释也有问题,如HTML文件在传递给Browser时采用的应该是UTF-8,而不应该是GB2312,如果采用GB2312,可能造成接收方的Browser无法正确解读收到的内容。除非,encoding只影响字符串的编码,但这好像也不大可能。
到底应该如何理解呢?请各位达人指点迷津。

解决方案 »

  1.   

    无论使用什么encoding ASCII码的前127个都是相同的,所以任何应用程序都可以轻易的解析。而encoding字段的主要用途是用于MultiBye字符,因为MultiByte编码的格式非常多,按照不同格式文本的解析会出现不同的结果。
      

  2.   

    有道理,不过如果文件是以定长编码如Unicode(UCS-2)存储的呢?解码出来肯定不对。
    比如,我按照
    http://www.w3schools.com/xml/xml_encoding.asp
    测试了一下,当将指定encoding为单字节编码或UTF-8(UTF-8也被看成了单字节
    编码,有点意外),而将文件实际存为Unicode,则IE根本就无法正确解析XML文件,会报告
    Switch from current encoding to specified encoding not supported.
    的错误。
    所以楼上的解释还是有问题的。
      

  3.   

    Polarislee(北极星)(北京那么大,何处是我家) 的解释是正确的。
    随便你用什么编码,ASCII码部分都是一样的,所以程序能准确读出文件中申明的编码方式。
    然后用申明的编码方式继续读取整个文件,从而正确解码。如果文件中实际存储的编码方式跟申明的有差异,那么大部分情况下都会造成不能正确解码!需要特别指出的是:
    1、如果文件的内容只有ASCII字符,没有多字节字符,那么“兼容性很强”,很少会碰到问题,其实是问题很难发现。
    2、用java程序处理时,如果使用一些reader载入文件,那么中文系统默认使用gbk,此时,文件中只要是中文就会对的,随便申明成什么编码;看起来这个例外很不错,其实,造成汉字乱码的原因与此同一原因:编码不正确!用writer输出xml时,申明成utf-8的话,实际写的还是gbk,造成申明与实际不一致,进而造成IE等不能正确解析。所以在处理xml时少用writer/reader,而应该用InputStream/OutputStream。真正的编码方式一定要与申明的一致。