哈瓦那 (UTF-8) を含む XML がサービス A に送信されます。
サービス A がそれをサービス B に送信します。
文字列は 哈瓦那 (ISO-8859-1) にエンコードされました。
哈瓦那にエンコードするにはどうすればよいですか? Javaのすべての文字列がUTF-16であることを考慮してください。サービス B は、「^ç」¦é‚£ ではなく、哈瓦那として比較する必要があります。
ありがとう。
哈瓦那 (UTF-8) を含む XML がサービス A に送信されます。
サービス A がそれをサービス B に送信します。
文字列は 哈瓦那 (ISO-8859-1) にエンコードされました。
哈瓦那にエンコードするにはどうすればよいですか? Javaのすべての文字列がUTF-16であることを考慮してください。サービス B は、「^ç」¦é‚£ ではなく、哈瓦那として比較する必要があります。
ありがとう。
テキスト ファイルを読み取るときは、ファイルの作成に使用された実際のエンコーディングを使用して読み取る必要があります。適切なエンコーディングを指定すると、正しい文字がメモリに取得されます。したがって、同じファイルが (意味的に) 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でそれらをエンコードしても、すべてを失うことはないと思います.
問題を誤診していると思います:
哈瓦那 (UTF-8) を含む XML がサービス A に送信されます。
わかった ...
サービス A がそれをサービス B に送信します。
わかった ...
文字列は å“^瓦那 (ISO-8859-1) に変換されました。
これは正しくありません。文字列は「変換」されていません。むしろ、間違った文字エンコーディングでデコードされています。具体的には、何かが UTF-8 でエンコードされたバイトを取得し、それらが ISO-8859-1 でエンコードされていると想定し、それに応じてデコードしたように見えます。
これを選択解除できますか?誤ったデコードが最初に発生した場所によって異なります。サービス B で発生した場合は、データ ソースのラベルを UTF-8 に変更し、正しくデコードできるはずです。一方、最初の誤ったデコードがサービス A で発生した場合は、運が悪い可能性があります。誤ったデコードは、認識されていないコードが他の文字に置き換えられるため、データが失われる可能性があります。その場合、元のデータは永久に失われます。
どちらの場合でも、これに対処する最善の方法は、間違った文字エンコーディングが混同されている原因を突き止め、それを修正することです。おそらく、文字セット/エンコーディングを指定するために XML を修正する必要があります。おそらく、トランスポート メカニズム (HTTP 要求または応答など) を修正して、適切なドキュメント エンコーディングを含める必要があります。
ライターとリーダーを使用して、入力/出力ストリームをエンコード/デコードします。
String yourText = "...";
InputStream yourInputStream = ...;
Writer out = new OutputStreamWriter(youInputStream, "UTF-8");
out.write(yourText);
読者も同じ。