1

電子メールの添付ファイル (ラテン記号とキリル記号を含む Windows-1251 エンコーディングの単純なテキスト ファイル) を文字列に変換するのに問題があります。つまり、キリル文字の変換に問題があります。次のようなbase64でエンコードされた文字列として添付ファイルを取得しました。

Base64 でエンコードされた電子メールの添付ファイル

元のファイル

それで、デコードしようとすると、「?」が表示されました。キリル文字の代わりに。

「?」の代わりに正しいキリル文字 (ロシア語) 記号を取得するにはどうすればよいですか?

私はすでにすべてのエンコーディングでこのコードを試しましたが、正しいロシア語の記号を取得するのに役立つものは何もありません.

    BASE64Decoder dec = new BASE64Decoder();

    for (String key : Charset.availableCharsets().keySet()) {
        System.out.println("K=" + key + " Value:" +
                           Charset.availableCharsets().get(key));
        try {
            System.out.println(new String(dec.decodeBuffer(encoded), key));
        } catch (Exception e) {
            continue;
        }
    }

よろしくお願いします。

4

1 に答える 1

0

私は BPEL とそれが使用するプロトコルにあまり詳しくありません。いくつかのバイナリ プロトコルを使用してノード間で通信する場合は、1) クライアントと受信者が同じ文字セットを使用していることを確認し、2) Java 文字列をこのエンコーディングで適切なバイトに変換する必要があります。Java は文字列を内部的に UTF-16 形式で保存します。したがって、実行String correct = new String(commonName.getBytes("ISO-8859-1"), "ISO-8859-5")すると、UTF-16 で正しい文字列が取得されます。次に、要求されたエンコーディングでバイトにエクスポートする必要があります。byte[] buff = correct.getBytes("UTF-8")ノード間で使用するエンコーディングが UTF-8 であると仮定します。エンコーディングが異なる場合は、実際にキリル文字をサポートしていることを確認する必要があります (たとえば、ISO-8859-1 ではサポートされていませ)。

データ交換に XML を使用する場合は、.xml で適切なエンコーディングが使用されていることを確認して<?xml encoding="UTF-8"?>ください。バイトをいじる必要はありません。文字列を正しく「インポート」するだけです(correct変数を参照)。XML に書き込むと自動的に文字が変換されますが、(エンコーディングは) 書きたい文字をサポートしている必要があります。したがって、 を設定encoding="ISO-88591"すると、それらの疑問符が再び表示されます。

于 2014-02-09T14:29:44.870 に答える