解析XML文件时的乱码有关问题
解析XML文件时的乱码问题
使用的是SAX解析器:
1. 输入流是字符流,经过InputSource封装后,解析器可以直接读取该流:
2. 输入流是字节流:
a. 使用在InputSource中指定的编码,所以要调用setEncoding()方法来指定编码。
b. 如果没有传入编码参数,解析器会根据XML文件中声明的编码来解析
c. 如果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规范中的算法自动探测字符编码,这样很有可能产生乱码情况。