0

如果

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

我想要上面的 String a 到 UTF-8 格式。我如何在java中实现这一点。

4

1 回答 1

2

那不是 GB2312 格式,它是一种 MIME 编码字,其中数据使用 Base64 编码,并且编码数据本身表示字符集 GB2312 中的文本。请参阅:http ://en.wikipedia.org/wiki/MIME#Encoded-Word

要对此进行解码,您需要一个支持 RFC2047 MIME Encoded-Word 的解码器。例如javax.mail 中的MimeUtility.decodeWord()

另一种选择是完全自己解析它,但我建议不要这样做。但是,步骤将是:

鉴于你的例子=?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 回答