3

UTF-8 ドキュメントを HTML に正しく変換する際に問題があります。

Solaris の Glassfish サーバー内でコードを実行すると、無効な結果が生成されます。

Windows のテスト環境で実行すると、結果は有効です。

どちらの環境も Java 1.6.0_27 を使用しています

両方のコードを含めています-関連する違いはありません。

アプリ サーバー テストの出力は次のとおりです (UTF-8 がこのプロセスを通過する場合)。

<CityName>Ð Ð¾Ð²Ð¾Ñ Ð¸Ð±Ð¸Ñ€Ñ Ðº</CityName>

<CityName>Ð&#157;овоÑ&#129;ибиÑ&#128;Ñ&#129;к</CityName>

2 番目には複数のエンティティ エンコーディングがあるのに対し、1 番目は純粋な UTF-8 であることに注意してください。エンコーディングが間違っています。

最初 - アプリ サーバー コード (ロガーは log4j ロガーです - テスト 13 では良い結果を示し、テスト 14 では悪い結果を示します):

logger.info("===test13:"+descr+req);

DocumentBuilderFactory domFactory = DocumentBuilderFactory .newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
Document doc = domBuilder.parse(new InputSource(new StringReader(req)));

logger.info("===test14:"+XmlHelper.domToString(doc));

次に、テスト コード - "out" は、両方のケースで適切なデータを示します。

PrintStream out = new PrintStream(System.out, true, "UTF-8");
String inmsg = TestRvcMessage.readUtfFile(fname);
inmsg = inmsg.trim();
out.println("INPUT:"+inmsg);

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();
Document doc = domBuilder.parse(new InputSource(new StringReader(inmsg)));

out.println("OUTPUT:"+xmlHelper.domToString(doc);
4

0 に答える 0