0

もしも

String a = "=?gb2312?B?rtmsMCC2=?= " // is in GB2312 format.

上記の String を UTF-8 形式にしたい。Javaでこれを達成するにはどうすればよいですか。

4

1 に答える 1

2

これは GB2312 形式ではなく、データが Base64 を使用してエンコードされた MIME Encoded-Word であり、エンコードされたデータ自体が文字セット GB2312 のテキストを表します。参照: http://en.wikipedia.org/wiki/MIME#Encoded-Word

これをデコードするには、RFC2047 MIME Encoded-Word をサポートするデコーダが必要です。たとえば、javax.mail のMimeUtility.decodeWord()

もう 1 つのオプションは、完全に自分で解析することですが、それはお勧めしません。ただし、手順は次のようになります。

あなたの例を考えると=?gb2312?B?rtmsMCC2=?=

  1. =?エンコードされた単語であることを示します
  2. gb2312最終データが gb2312 エンコーディングであることを示します
  3. ?BペイロードがBase64でエンコードされていることを示します
  4. ?ペイロードの開始を示します
  5. rtmsMCC2=実際のペイロードです (Base64 でエンコードされたデータとして)
  6. ?=エンコードされた単語の終わりを示します
  7. Base64を使用してデコードします(破損しているようですが、末尾の結果をバイト単位でrtmsMCC2=削除します)=AE D9 AC 30 20 B6
  8. gb2312 エンコーディングを使用してバイトを変換しますAE D9 AC 30 20 B6(これらのバイトを実際の gb2312 文字にマッピングするのに問題があるため、ここでは行いません)。

https://www.rfc-editor.org/rfc/rfc2047も参照してください。

于 2012-11-02T12:40:18.347 に答える