如何在java中将数据GB2312转换为UTF-8?

时间:2012-11-02 12:04:23

标签: java mime

如果

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

我想将String a上面改为UTF-8格式。我如何在java中实现这一目标。

1 个答案:

答案 0 :(得分:2)

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

要对此进行解码,您需要一个支持RFC2047 MIME编码字的解码器。例如,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字符)。
  9. 另见http://tools.ietf.org/html/rfc2047