如果

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


我想将String a转换为UTF-8格式。我如何在Java中实现这一点。

最佳答案

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

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

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

给出您的示例=?gb2312?B?rtmsMCC2=?=


=?表示它是一个编码的单词
gb2312表示最终数据采用gb2312编码
?B表示有效负载已编码为Base64
?指示有效载荷的开始
rtmsMCC2=是实际有效负载(作为Base64编码数据)
?=表示编码单词的结尾
使用Base64解码rtmsMCC2=(它似乎已损坏,但是删除尾随的=将导致字节AE D9 AC 30 20 B6
使用gb2312编码转换字节AE D9 AC 30 20 B6(我在这里不做,因为我无法将这些字节映射到实际的gb2312字符)。


另见http://tools.ietf.org/html/rfc2047

关于java - 如何在Java中将数据GB2312转换为UTF-8?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13194883/

10-10 09:16