如果
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/