我正在解析一个包含文本字符串的 XML 文档,这些文本字符串是从各种输入文本文件中获得的,没有关于其编码的信息,这些信息存储为属性的值。XML 文档本身是使用特定编码生成的,但是文本字符串作为二进制数据传递到 XML 文档中,而没有任何关于其原始编码是什么的进一步信息。ASCII 值大于 127 的字符被转义:
<?xml version="1.0" encoding="ISO-8859-2" ?>
<Root>
<Value val=""µà""/>
</Root>
整个 XML 文档以ISO-8859-2编码,元素Value的属性val的值为:
"µà"
最初以ISO-8859-1编码,根据 PSPad HEX 查看器的字节表示为:
22 B5 E0 22
在ISO-8859-2中也可以表示为:
"ľŕ"
问题是,我想将其解析为ISO-8859-2,但无法从 SAX 解析器获得非规范化值。该属性的值可以以 String 对象实例的形式获得,该对象实例已经将文本表示为:
"µà"
我试图说服解析器解析ISO-8859-2中的 XML ,但没有任何改变:
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
MyHandler handler= new MyHandler(); // implementation of DefaultHandler
parser.setContentHandler(handler);
parser.setEntityResolver(handler);
InputStream instream = new FileInputStream("myFile.xml");
InputSource is = new InputSource(instream);
is.setEncoding("ISO-8859-2");
parser.parse(is);
我尝试将字符串视为UTF-16并获取字节,然后使用这些字节来创建所需的值:
String val = attributes.getValue("val");
try{
byte[] bytes = val.getBytes(StandardCharsets.UTF_16);
ByteBuffer inputBuffer = ByteBuffer.wrap(bytes);
CharBuffer chData = Charset.forName("ISO-8859-2").decode(inputBuffer);
} catch (UnsupportedEncodingException e) {
System.out.println("Encoding not supported.")
}
但我得到的是:
ţ˙ " ľ ŕ "
分别:
[-2, -1, 0, 34, 0, -75, 0, -32, 0, 34]
我不确定,如果这种方法是唯一正确的方法,如何获得文本值的原始二进制表示。
谢谢你的建议。