欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解析XML文件时的乱码问题

程序员文章站 2022-07-08 22:52:31
...
使用的是SAX解析器:
    DocumentBuilderFactory doDocumentBuilder = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = doDocumentBuilder.newDocumentBuilder();


1. 输入流是字符流,经过InputSource封装后,解析器直接读取该流,忽略其中的任何字符编码声明:
	BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("dialect.xml"), "WINDOWS-1252")); // 实例化InputStreamReader时,已指定字符编码
	InputSource is = new InputSource(reader);
	Document doc = docBuilder.parse(is);
	doc.getDocumentElement().normalize();


2. 输入流是字节流

a. 字节流不包含编码信息,需要调用InputSource的setEncoding(String encoding)方法来指定编码。
	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规范中的算法自动探测字符编码,这样很有可能产生乱码情况。
相关标签: java xml encoding