もしも
String a = "=?gb2312?B?rtmsMCC2=?= " // is in GB2312 format.
上記の String を UTF-8 形式にしたい。Javaでこれを達成するにはどうすればよいですか。
これは 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=?=
=?
エンコードされた単語であることを示しますgb2312
最終データが gb2312 エンコーディングであることを示します?B
ペイロードがBase64でエンコードされていることを示します?
ペイロードの開始を示しますrtmsMCC2=
実際のペイロードです (Base64 でエンコードされたデータとして)?=
エンコードされた単語の終わりを示しますrtmsMCC2=
削除します)=
AE D9 AC 30 20 B6
AE D9 AC 30 20 B6
(これらのバイトを実際の gb2312 文字にマッピングするのに問題があるため、ここでは行いません)。https://www.rfc-editor.org/rfc/rfc2047も参照してください。