3

私のアプリケーションはurlconnectionからxmlを読み取ります。xmlエンコーディングはISO-8859-1であり、é文字が含まれています。xerces saxparserを使用して、受信したxmlコンテンツを解析します。ただし、lunix OSでアプリケーションを実行している間は、éを正しく解析できません。Windowsではすべてが正常に機能します。ヒントを教えていただけませんか?どうもありがとう

4

5 に答える 5

2

これはおそらく、実際には別のエンコーディングであるのに、「ISO-8859-1」としてマークされたファイルの場合です。

多くの場合、これは "ISO-8859-1" と "Windows-2152" で発生します: これらは交換可能であるかのように使用されていますが、そうではありません。(この回答へのコメントでは、両方のエンコーディングが「é」の文字コードに同意することが明らかにされているため、Windows-1252 はおそらくそうではありません。)

16 進エディタを使用して、ファイル内の「é」の正確な文字コードを見つけることができます。その値を、ファイルのエンコーディングのヒントとして利用できます。ファイルの生成方法を制御できる場合は、責任のあるコード/メソッドを確認することもお勧めします。

于 2008-11-16T12:25:24.000 に答える
1

これはfile.encodingに関連しているに違いありません。LinuxでVMパラメーターとして-Dfile.encoding=iso-8859-1を使用して実行してみてください。

これが機能する場合は、ストリームを開くときに(コードのどこかで)正しい形式を指定する必要があります。

于 2008-11-16T09:47:56.033 に答える
1

最初に行うべきことは、Tomalak が示唆するように、ヘッダーに記載されているエンコーディングではなく、xml ファイルの実際のエンコーディングを決定することです。

Internet Explorerで開くことから始めることができます。エンコーディングが正しくない場合、次のようなエラーが表示されることがあります。

テキスト コンテンツに無効な文字が見つかりました。リソースの処理中にエラーが発生しました...

または次のもの:

現在のエンコーディングから指定されたエンコーディングへの切り替えはサポートされていません。リソースの処理中にエラーが発生しました...

次のステップでは、複数のエンコーディングをサポートするテキスト エディターを使用します。無料で使いやすく、複数のエンコーディングをサポートするNotepad++を使用できます。エンコードに関する xml ヘッダーの内容に関係なく、エディターはファイルのエンコードを検出してステータス バーに表示しようとします。

ファイルのエンコーディングが正しいと判断した場合は、Java 内でエンコーディングを正しく処理していない可能性があります。Java 文字列は UTF-16 であり、デフォルトでバイト配列との間で変換する場合、エンコーディングが指定されていない場合、Java はデフォルトでシステム エンコーディング (Windows では Windows-1521、最新の Linux では UTF-8) になることを考慮してください。一部のエンコーディング変換では、固定の 8 ビット エンコーディング (つまり、Windows-1252 <-> ISO-8859-1) 間の変換など、「奇妙な」文字のみが表示されます。他の変換では、無効な文字が原因でエンコンディング例外が発生します (たとえば、Windows-1252 テキストを UTF-8 としてインポートしてみてください)。

無効なコードの例は次のとおりです。

// Parse the input
SAXParser saxParser = factory.newSAXParser();
InputStream is = new ByteArrayInputStream(stringToParse.getBytes());
saxParser.parse( is, handler );

変換stringToParse.getBytes()は、デフォルトで、Windows プラットフォームで Windows-1252 としてエンコードされた文字列を返します。このステップで XML テキストが ISO-8859-1 でエンコードされていた場合、文字が間違っています。正しい手順は、XML を文字列ではなくバイトとして読み取り、SAX で xml エンコーディングを管理できるようにすることです。

于 2008-11-16T12:57:21.000 に答える
0

XML宣言でエンコーディングが指定されていない場合、saxパーサーはデフォルトのエンコーディングであるUTF-8を使用しようとします。

文字エンコードはわかっているが、XML宣言で指定されていない場合は、そのエンコードをInputSourceで使用するようにパーサーに指示できます。

InputSource inputSource = new InputSource(xmlInputStream);
inputSource.setEncoding("ISO-8859-1");
于 2008-11-19T20:24:05.873 に答える
0

私の返事が遅れて申し訳ありません。問題を解決しました。入力ストリームで間違った操作を行いました (Fernando Miguelez が言ったように、変換で問題が発生しました)。

皆さんの助けに感謝します。

于 2008-12-03T15:31:42.807 に答える