引入编码信息的一些实践——乱码探源(3)
前面说到,文本文件中没有编码信息,导致了各种混乱,那么,最关键的就是要指定好所用的编码信息。具体地讲,有以下一些途径。 变相引入 什么是变相引入呢?其实本质与前面提到的一些“文件头”信息是类似的。 xml 我们来看看xml文件的例子,你通常能在最开始看到这样的一行: <?xml version="1.0" encoding="UTF-8"?> 那么这里面,encoding指明的就是所用编码的信息了。 可是,等等!!为了得到这一编码信息,我得先读取这一文件;可要正确读取文件,我又要先知道编码信息! 这成了一个鸡生蛋,蛋生鸡,又或者说是先有鸡还是先有蛋的问题了。 怎么破呢?考虑这一行信息所有字符都是ASCII中的字符,那么我们可以先使用最基础的ASCII去读取它开头的一些信息,获取到这一编码信息后,再次用这一编码去读取文件即可。 ASCII可谓是这样一个始祖鸟或者始祖蛋一样的存在。 可以动动手做些实验,先建立一个xml文件,比如就叫foo.xml 内容如下: <?xml version="1.0" encoding="UTF-8"?> <foo>向我开炮</foo> 然后初步测试读取编码信息 package org.jcc.core.encode; import static org.assertj.core.api.Assertions.assertThat; import java