[英]Get raw binary data from XML attribute's value parsed with SAX in Java
我正在解析一個包含文本字符串的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);
我嘗試將String視為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]
我不確定,如果這種方法是唯一正確的方法,那么如何獲取文本值的原始二進制表示形式。
感謝您的建議。
這個問題與SAX不相關,而僅僅是一個如何將字節數組轉換為ISO-8859-2編碼字符串的問題。 因此,您可以使用如何在Java中將字符串與UTF8字節數組之間來回轉換,以使用一種格式(ISO-8859-1)將字符串從屬性轉換為字節數組,然后從另一種格式(ISO-8859)轉換回字符串。 -2)。
String s = "\"µà\"";
System.out.println(s);
byte[] iso8859_1_bytes = s.getBytes(Charset.forName("ISO-8859-1"));
System.out.println(Arrays.toString(iso8859_1_bytes));
String conv = new String(iso8859_1_bytes, Charset.forName("ISO-8859-2"));
System.out.println(conv);
這將生成以下輸出:
"µà"
[34, -75, -32, 34]
"ľŕ"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.