POP3遇到的编码问题

http://www.mxcz.net/tools/base64.aspx 在线解码器

从pop3返回的字符串中提取字符编码的字符串

String charset = head.substring(head.indexOf("charset=") + 8, head.indexOf("Content-Transfer-Encoding"));

提取出来后,转字符串显示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()打印的结果是不一致的

System.out.println(charset.getBytes() + "----" + "utf-8".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去除,所以字符报错

String charset = head.substring(head.indexOf("charset=") + 8, head.indexOf("Content-Transfer-Encoding") - 1);

一些解析需要关注的量

发信人:
  1.From: "=?gb18030?B?RGEu?=" <306154982@qq.com>
  2.From: da306154982@163.com

收信人:
  1.To: da306154982@163.com
  2.To: "=?gb18030?B?ZGEzMDYxNTQ5ODI=?=" <da306154982@163.com>

主题:
  1.Subject: =?gb18030?B?0ru34tX9s6O1xNPKvP4=?=
  2.Subject: =?GBK?B?0rbH4ObDtcS80s2l1/fStQ==?=
  3.Subject: =?gbk?B?19S2r7vYuLQ6wLTX1FBQRMnMs8e1xLyku+7Tyrz+?=

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?="
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值