我正在try 解析一个包含十六进制值𝓅
的XML.这表示数学符号?.我得到的输出是��
.
我做错了什么?
示例输入XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>𝓅</data>
</root>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>��</data>
</root>
获取XML读取器的代码:
factory = org.apache.xerces.jaxp.SAXParserFactoryImpl.newInstance();
final XMLReader xmlReader;
xmlReader = factory.newSAXParser().getXMLReader();
我正在使用UTF-8编码在解析时进行解码.
我用来读写XML的代码是这个方法:
public void readAndWriteXml(InputSource inputSource, OutputStream out) throws IOException, SAXException, ParserConfigurationException {
XMLReader xmlReader = getXmlReader();
Serializer serializer = SerializerFactory.getSerializer(configProps);
serializer.setOutputStream(out);
xmlReader.setContentHandler(serializer.asContentHandler());
if(logger != null){
getLogger().debug("starting xml parsing" + LocalTime.now());
}
xmlReader.parse(inputSource);
if(logger != null){
getLogger().debug("end xml parsing" + LocalTime.now());
}
}
GetXMLReader()如下所示:
final XMLReader xmlReader;
xmlReader = factory.newSAXParser().getXMLReader();
xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
xmlReader.setFeature("http://xml.org/sax/features" +
"/namespaces", true);
xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", true);
// xmlReader.setFeature("http://xml.org/sax/features/validation", true);
xmlReader.setEntityResolver(wrappedEntityResolver);
xmlReader.setErrorHandler(new SaxErrorHandler());
return xmlReader;
以下是我对类进行初始化的过程:
public XmlNormalizer(String catalogPath) throws IOException {
// We want the Apache XML parser, not the embedded Oracle Java version.
factory = org.apache.xerces.jaxp.SAXParserFactoryImpl.newInstance();
factory.setNamespaceAware(true);
List<Path> catalogFiles = this.findByFileName(new File(catalogPath).toPath(), CATALOG_FILENAME_PATTERN);
String[] catalogArray = catalogFiles.stream().map(Path::toString).toArray(String[]::new);
configProps = OutputPropertiesFactory.getDefaultMethodProperties("xml");
XMLCatalogResolver xmlCatalogResolver = new XMLCatalogResolver(catalogArray, true);
wrappedEntityResolver = new WrappedEntityResolver(xmlCatalogResolver);
}
WrapedEntityResolver只是import org.apache.xerces.util.XMLCatalogResolver;
左右的包装器