当前位置:编程学习 > JAVA >>

用javamail接收没有经过编码(转码)的中文附件时,出现javamail javax.mail.internet.ParseException异常

--------------------编程问答-------------------- 补充一张异常截图。
--------------------编程问答-------------------- 再补充:
从上面截图可以看出,getFileName()其实不会返回"如何lz有效调整薪酬.doc",而是很长很长的乱码。因为去getFileName()的时间,看到的,不是"如何lz有效调整薪酬.doc"中文名,而是乱码。
如下图:


--------------------编程问答-------------------- 有人来讨论讨论吗

是否可以通过改写javamail的getFileName(),getDisposition()方法来解决? --------------------编程问答-------------------- 学习。 --------------------编程问答-------------------- 自己完善商城的时候遇到过这种问题,附件名其实是文件名,文件名本身读取的时候已经出现乱码,这跟数据库存储出现乱码一样,filename.getBytes("ISO-8859-1"),"gb2312"),先转为正常的字符,本身整个协议本身的转码没错。  --------------------编程问答--------------------
引用 5 楼 iaiti 的回复:
自己完善商城的时候遇到过这种问题,附件名其实是文件名,文件名本身读取的时候已经出现乱码,这跟数据库存储出现乱码一样,filename.getBytes("ISO-8859-1"),"gb2312"),先转为正常的字符,本身整个协议本身的转码没错。 


呵,首先你要先得到文件名(你上面的filename),才可能去做filename.getBytes("ISO-8859-1"),"gb2312")
但是getFileName()就出异常了,如何得到文件名?! --------------------编程问答-------------------- 有人处理过类似的问题吗? --------------------编程问答--------------------
引用 7 楼 Fandian 的回复:
有人处理过类似的问题吗?

lz,filename为什么异常,乱码了嘛,你自己能不能把乱码转成正常的,那就正常了。 --------------------编程问答-------------------- 就像你平时做错东西一样,有时候错了就是错了,要怎么改才最重要! --------------------编程问答--------------------
引用 8 楼 iaiti 的回复:
Quote: 引用 7 楼 Fandian 的回复:

有人处理过类似的问题吗?

lz,filename为什么异常,乱码了嘛,你自己能不能把乱码转成正常的,那就正常了。


取不出来,不是取出来后乱码。 --------------------编程问答--------------------
引用 9 楼 iaiti 的回复:
就像你平时做错东西一样,有时候错了就是错了,要怎么改才最重要!


其实有两种办法,但比较别扭:
1,改写javamail API中的相关类,让它可以取得没有转码的中文文件名。
2,出现异常时,做一下异常处理,然后用另外的方法(不是javamail的)来提取附件。 --------------------编程问答--------------------
引用 10 楼 Fandian 的回复:
Quote: 引用 8 楼 iaiti 的回复:

Quote: 引用 7 楼 Fandian 的回复:

有人处理过类似的问题吗?

lz,filename为什么异常,乱码了嘛,你自己能不能把乱码转成正常的,那就正常了。


取不出来,不是取出来后乱码。

不好意思,是我看错了。楼主,看一下,http://bbs.csdn.net/topics/20060460和你同样问题的。
--------------------编程问答-------------------- 异常还是看一下别人的代码吧,那个地方写错了,因为别人只是乱码问题。我刚开始也看错了。 --------------------编程问答--------------------
引用 12 楼 iaiti 的回复:
Quote: 引用 10 楼 Fandian 的回复:

Quote: 引用 8 楼 iaiti 的回复:

Quote: 引用 7 楼 Fandian 的回复:

有人处理过类似的问题吗?

lz,filename为什么异常,乱码了嘛,你自己能不能把乱码转成正常的,那就正常了。


取不出来,不是取出来后乱码。

不好意思,是我看错了。楼主,看一下,http://bbs.csdn.net/topics/20060460和你同样问题的。


1,这文章看过,我分析一下。
attachment="d:\网络地址.txt";
mbp2.setFileName(attachment);如果是这样就不能在信箱里正确显示!

如果有人这样发邮件,这肯定是不行的,文件名必须encode才可以;当然我们没办法控制别人发邮件的代码,其实用客户端发是不会这样的,此种情况经常发生在用JAVAMAIL发邮件的,比如注册激活邮件之类的邮件中。

2,这文章里的二楼方法不行,就是我上面说的问题,BodyPart.getFilename()都发生异常了,就不用去谈对它的结果进行处理了,没结果,呵。





--------------------编程问答--------------------
引用 14 楼 Fandian 的回复:
Quote: 引用 12 楼 iaiti 的回复:

Quote: 引用 10 楼 Fandian 的回复:

Quote: 引用 8 楼 iaiti 的回复:

Quote: 引用 7 楼 Fandian 的回复:

有人处理过类似的问题吗?

lz,filename为什么异常,乱码了嘛,你自己能不能把乱码转成正常的,那就正常了。


取不出来,不是取出来后乱码。

不好意思,是我看错了。楼主,看一下,http://bbs.csdn.net/topics/20060460和你同样问题的。


1,这文章看过,我分析一下。
attachment="d:\网络地址.txt";
mbp2.setFileName(attachment);如果是这样就不能在信箱里正确显示!

如果有人这样发邮件,这肯定是不行的,文件名必须encode才可以;当然我们没办法控制别人发邮件的代码,其实用客户端发是不会这样的,此种情况经常发生在用JAVAMAIL发邮件的,比如注册激活邮件之类的邮件中。

2,这文章里的二楼方法不行,就是我上面说的问题,BodyPart.getFilename()都发生异常了,就不用去谈对它的结果进行处理了,没结果,呵。






那帮不了你了,我不懂。。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,