0

dom4j の SAXReader によって解析されているドキュメントを ISO-8859-2 エンコーディングから UTF-8 に変換する方法はありますか? dom4j によって作成されたオブジェクトが既に Unicode/UTF-8 であり、次のようなコードを実行しているように、解析中にそれを行う必要があります。

"some text".equals(node.getText());

true を返します。

4

2 に答える 2

2

これは dom4j によって自動的に行われます。JavaのすべてのStringインスタンスは、共通のデコードされた形式です。が作成されると、元の文字エンコーディングが何であったStringかを知ることはできません (または、文字列がエンコードされたバイトから作成された場合でも)。

XML ドキュメントに文字エンコーディングが指定されていることを確認してください (UTF-8 でない限り、これは必須です)。

于 2009-06-11T16:45:33.413 に答える
0

デコードは の前 (または前) で行われ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);
于 2009-06-11T16:50:00.580 に答える