この主題は多くの議論の対象となっていますが、まだ新しい議論が見られます。私のシナリオは次のとおりです。
UTF-8 が JVM のデフォルトの文字エンコーディングである Linux サーバー上で実行される Java フレームワーク。このフレームワークは、処理対象の Tibco RV メッセージを受信するいくつかのサービスで構成されています。また、これらのメッセージの一部には非 ASCII 文字が含まれており、Windows サーバーから送信されます。メッセージの作成時に使用されるエンコーディングは ISO8859-1 です。さて、データが Tib rv メッセージから抽出されると、問題のあるフィールドが Java オブジェクトとして「到着」し、文字列にキャストする必要があります...そして、ここでは、非を含む ISO8859-1 文字列をまだ抽出できていませんASCII 文字 (スウェーデン語の「å」、「ä」、「ö」) を適切な方法で UTF-8 文字列に変換します。次の方法を使用してみました。
String isoStreet = new String(response.get("street").toString().getBytes(StandardCharsets.ISO_8859_1),java.nio.charset.StandardCharsets.UTF_8);
また、java.nio パッケージ内のエンコーダー/デコーダーを使用してみましたが、成功しませんでした。
また興味深いのは、PuttY を使用して、サービスがホストされ実行されているサーバーに接続していることです。そしてそこから、(tibcorvsend クライアントを使用して) シェルから直接 Tibco rv 要求を行う可能性があり、サインインする前に PuttY (Window_>Translation) でリモート文字セットを ISO8859-1 に設定する必要があるようです。サーバーとそのTib rvリクエストを作成します-これが完了すると、リモートLinuxサーバーで設定したエンコーディングに関係なく、ASCII以外の文字が応答で正しく表示されます。この場合、「export LC_ALL=en_US.UTF-8」または「export LC_ALL=sv_SE.iso88591」の使用は問題ではありません... PuttY で設定したリモートエンコーディングのみ...
これは、応答メッセージが正常であるように見え、少なくともシェルが適切な文字を出力できることを意味するはずです。しかし、Java VM 内で (Java サービスを使用して) 応答オブジェクトをデバッグして表示するときに (この文字列への変換を望んでいない)、応答フィールドが静かに文字列にプッシュされていると思います (この文字列への変換は望ましくありません)。 、そうでない場合は、必要に応じてより明確にしようとするかもしれません...
この問題に関するご意見、どなたでも
よろしく /R