dom4j の SAXReader によって解析されているドキュメントを ISO-8859-2 エンコーディングから UTF-8 に変換する方法はありますか? dom4j によって作成されたオブジェクトが既に Unicode/UTF-8 であり、次のようなコードを実行しているように、解析中にそれを行う必要があります。
"some text".equals(node.getText());
true を返します。
これは dom4j によって自動的に行われます。JavaのすべてのString
インスタンスは、共通のデコードされた形式です。が作成されると、元の文字エンコーディングが何であったString
かを知ることはできません (または、文字列がエンコードされたバイトから作成された場合でも)。
XML ドキュメントに文字エンコーディングが指定されていることを確認してください (UTF-8 でない限り、これは必須です)。
デコードは の前 (または前) で行われInputSource
ますSAXReader
。そのクラスの javadoc から:
SAX パーサーは、InputSource オブジェクトを使用して、XML 入力の読み取り方法を決定します。使用可能な文字ストリームがある場合、パーサーはそのストリームで見つかったテキスト エンコーディング宣言を無視して、そのストリームを直接読み取ります。文字ストリームがなく、バイト ストリームがある場合、パーサーはそのバイト ストリームを使用し、InputSource で指定されたエンコーディングを使用するか、(エンコーディングが指定されていない場合) のようなアルゴリズムを使用して文字エンコーディングを自動検出します。 XML 仕様。文字ストリームもバイト ストリームも利用できない場合、パーサーは、システム識別子によって識別されるリソースへの URI 接続を開こうとします。
したがって、作成方法によって異なりますInputSource
。適切なデコードを保証するには、次のようなものを使用できます。
InputStream stream = <input source>
Charset charset = Charset.forName("ISO-8859-2");
Reader reader = new BufferedReader(new InputStreamReader(stream, charset));
InputSource source = new InputSource(reader);