さまざまな入力テキストファイルから取得したテキスト文字列を含むXML文書を解析しています。エンコーディングに関する情報は属性の値として格納されています。 XML文書自体は特定のエンコーディングで生成されますが、元のエンコーディングの詳細についての情報はなく、テキスト・ストリングはバイナリー・データとしてXML文書に渡されます。 127以上のASCII値を持つ文字がエスケープされていますJavaのSAXで解析されたXML属性の値から生のバイナリデータを取得
<?xml version="1.0" encoding="ISO-8859-2" ?>
<Root>
<Value val=""µà""/>
</Root>
XML文書全体が要素値の属性ヴァルの ISO-8859-2と値でエンコードされている。
元々PSPAD HEXビューアに従って ISO-8859-1とバイト表現でエンコード"µà"
ある:
22 B5 E0 22
もISO-8859-2として
で表すことができ :問題がある
"ľŕ"
、私はISO-8859-2としてそれを解析したいのですが、SAXパーサから正規化されていない値を得ることはできません。属性の値として、既にテキストを表すStringオブジェクトのインスタンスの形で得ることが可能である:
"µà"
私はISO-8859-2でXMLを解析するパーサを説得しようとしたが、何も変わっていません:
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.")
}
: 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として文字列を扱い、バイトを取得し、目的の値を作成するために、これらのバイトを使用するようにしてください210
しかし、私が取得することである:
respectivellyţ˙ " ľ ŕ "
:
[-2, -1, 0, 34, 0, -75, 0, -32, 0, 34]
このアプローチはテキスト値の元のバイナリ表現を取得する方法だけで正しいアプローチであれば、私は、わかりません。
ありがとうございました。
問題が_ISO-8859-1_が値とは何の関係もないということです。私も、解析プロセス全体で_ISO-8859-1_エンコーディングへの参照を持っていません。私が知っているのは、値** "" µ à "" **は可能な_ISO-8859-2_として扱われるべきですが、パーサがそのエンコーディングでXMLを扱うことはできません。私は属性の値の正規化が_UTF-16_ Stringインスタンスにそれを解析することにつながると思います。それにもかかわらず、私はあなたの答えに感謝します。 – WakamaHeja