【问题标题】:How to convert data GB2312 to UTF-8 in java?如何在java中将数据GB2312转换为UTF-8?
【发布时间】:2012-10-23 02:11:51
【问题描述】:

如果

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

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

【问题讨论】:

标签: java mime


【解决方案1】:

这不是 GB2312 格式,它是一种 MIME Encoded-Word,其中数据使用 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. ? 表示payload的开始
  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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2011-02-19
    • 2011-08-08
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多