解析XML文件时的乱码有关问题

解析XML文件时的乱码问题
使用的是SAX解析器:
    DocumentBuilderFactory doDocumentBuilder = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = doDocumentBuilder.newDocumentBuilder();


1. 输入流是字符流,经过InputSource封装后,解析器可以直接读取该流:
	BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("dialect.xml"), "WINDOWS-1252"));
	InputSource is = new InputSource(reader);
	Document doc = docBuilder.parse(is);
	doc.getDocumentElement().normalize();


2. 输入流是字节流:

a. 使用在InputSource中指定的编码,所以要调用setEncoding()方法来指定编码。
	BufferedInputStream bis = new BufferedInputStream(new FileInputStream("dialect.xml"));
	InputSource is = new InputSource(bis);
	is.setEncoding("WINDOWS-1252");
	Document doc = docBuilder.parse(is);


b. 如果没有传入编码参数,解析器会根据XML文件中声明的编码来解析

<?xml version="1.0" encoding="WINDOWS-1252"?>
<dialects>
</dialects>


c. 如果XML文件中也没有编码声明,则根据XML规范中的算法自动探测字符编码,这样很有可能产生乱码情况。