http://www.mxcz.net/tools/base64.aspx 在线解码器
从pop3返回的字符串中提取字符编码的字符串
提取出来后,转字符串显示charset就开始抛字符编码出错的异常
public static String getFromBASE64(String s, String charset) {
if (s == null)
return null;
if (charset == null)
charset = "utf-8";
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
//下面这charset如果传入pop3解析出来的字符编码就报错
return new String(b, charset);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
之后做了个测试,解析出来的与直接写的获取getBytes()打印的结果是不一致的
之前想用switch case来解决这个问题但是还是不行,最后只能这样
//获得字符集,不知道为什么邮件里面获取的字符串字符集有问题
public static String chooseCharset(String charset) {
if (charset.contains("utf-8")) {
return "utf-8";
}
if (charset.contains("gbk")) {
return "gbk";
}
if (charset.contains("gb18030")) {
return "gb18030";
}
return null;
}
问题:从pop3返回内容中虽然能提取到字符编码的字符串比如utf-8,gbk,但是new String(b, charset);这会抛不认识这个字符编码的异常,但是手动传new String(b, “utf-8”);又没事。
最好的解决方案:把POP3提取出来的charset要先转码(目前不知道到要怎么实现这个)
问题解决:在这解析的时候多了一个\n所以需要-1去除,所以字符报错
一些解析需要关注的量
发信人:
From: "=?gb18030?B?RGEu?=" <@qq.com>
From: [email protected]
收信人:
To: [email protected]
To: "=?gb18030?B?ZGEzMDYxNTQ5ODI=?=" <[email protected]>
主题:
Subject: =?gb18030?B?ru34tX9s6O1xNPKvP4=?=
Subject: =?GBK?B?rbH4ObDtcS80s2l1/fStQ==?=
Subject: =?gbk?B?S2r7vYuLQ6wLTX1FBQRMnMs8e1xLyku+Tyrz+?=
Content-Type: text/html; 内容的格式
charset="gb18030" 内容的字符编码
Content-Transfer-Encoding: base64 内容的传输加密方式
如果是附件的话 filename附件名称:
Content-Disposition: attachment; filename="test.png"
需要注意的是中文名字的附件:
Content-Disposition: attachment; filename="=?gb18030?B?08q8/re1u9gudHh0?="