1

哈瓦那 (UTF-8) を含む XML がサービス A に送信されます。

サービス A がそれをサービス B に送信します。

文字列は 哈瓦那 (ISO-8859-1) にエンコードされました。

哈瓦那にエンコードするにはどうすればよいですか? Javaのすべての文字列がUTF-16であることを考慮してください。サービス B は、「^ç」¦é‚£ ではなく、哈瓦那として比較する必要があります。

ありがとう。

4

3 に答える 3

5

テキスト ファイルを読み取るときは、ファイルの作成に使用された実際のエンコーディングを使用して読み取る必要があります。適切なエンコーディングを指定すると、正しい文字がメモリに取得されます。したがって、同じファイルが (意味的に) 2 つのバージョン (UTF-8 エンコードと ISO-8859-1) に存在する場合、最初のファイルを UTF-8 で読み取り、2 番目のファイルを ISO-8859-1 で読み取ると、まったく同じ結果になります。メモリ内の文字。

上記は、最初に ISO-8859-1 でファイルをエンコードすることが理にかなっている場合にのみ当てはまります。UTF-8 はすべての Unicode 文字を格納できます。しかし、ISO-8859-1 は Unicode 文字 (西洋言語の文字) の小さなサブセットしかエンコードできません。あなたが投稿した文字は文字通り中国語のように見えます.ISO-8859-1でそれらをエンコードしても、すべてを失うことはないと思います.

于 2012-05-28T06:29:02.377 に答える
2

問題を誤診していると思います:

哈瓦那 (UTF-8) を含む XML がサービス A に送信されます。

わかった ...

サービス A がそれをサービス B に送信します。

わかった ...

文字列は å“^瓦那 (ISO-8859-1) に変換されました。

これは正しくありません。文字列は「変換」されていません。むしろ、間違った文字エンコーディングでデコードされています。具体的には、何かが UTF-8 でエンコードされたバイトを取得し、それらが ISO-8859-1 でエンコードされていると想定し、それに応じてデコードしたように見えます。

これを選択解除できますか?誤ったデコードが最初に発生した場所によって異なります。サービス B で発生した場合は、データ ソースのラベルを UTF-8 に変更し、正しくデコードできるはずです。一方、最初の誤ったデコードがサービス A で発生した場合は、運が悪い可能性があります。誤ったデコードは、認識されていないコードが他の文字に置き換えられるため、データが失われる可能性があります。その場合、元のデータは永久に失われます。

どちらの場合でも、これに対処する最善の方法は、間違った文字エンコーディングが混同されている原因を突き止め、それを修正することです。おそらく、文字セット/エンコーディングを指定するために XML を修正する必要があります。おそらく、トランスポート メカニズム (HTTP 要求または応答など) を修正して、適切なドキュメント エンコーディングを含める必要があります。

于 2012-05-28T07:36:10.557 に答える
0

ライターとリーダーを使用して、入力/出力ストリームをエンコード/デコードします。

String yourText = "...";
InputStream yourInputStream = ...;
Writer out = new OutputStreamWriter(youInputStream, "UTF-8");

out.write(yourText);

読者も同じ。

于 2012-05-28T06:34:10.100 に答える