100分:关于如何解决邮件附件名称乱码问题(另贴给分,这个请放心)

kw123 2004-08-26 01:07:19
不知道什么原因?附件的名称老是出现中文乱码!如何处理和解决!100分
在http://community.csdn.net/Expert/topic/3290/3290875.xml?temp=.6617395中加
if ((temp = part.getFileName()) != null)
{
String filename="";
filename = new String(MimeUtility.decodeText(part.getFileName()).getBytes("ISO8859_1"),"GBK");
filename=new String(filename.toLowerCase().getBytes("ISO8859_1"),"GBK");
savePart(part,filename);//
s2= "<b>附件:</b><a href=fujian/"+filename+"> " + filename + "</a><br>";
}

public void savePart(Part part,String Filename)
{
try
{
Filename =new String(Filename.getBytes("ISO8859_1"),"GBK");
File file = new File("D:\\youjian\\MailWeb\\fujian\\"+Filename);
if(file.exists()==true) return;
for(int i=0;file.exists();i++){
int d = Filename.lastIndexOf(".");
String tmp = Filename.substring(0,d-1) + i + Filename.substring(d,Filename.length());
Filename=tmp;
file = new File("D:\\youjian\\MailWeb\\fujian\\"+Filename);
}
FileOutputStream myFileoutputstream = new FileOutputStream(file);
int chunk = part.getSize();
byte [] buffer = new byte[chunk];
InputStream instream = part.getInputStream();
instream.read(buffer,0,chunk);
myFileoutputstream.write(buffer,0,chunk);
instream.close();
myFileoutputstream.close();
}
catch(Exception e)
{
//out.print("无");
}

}

找到一篇文章
但是有一种情况下,取得的中文文件名也是乱码,原因有的邮件服务器在发送邮件时,对附件名进行了特殊的编码,解决如上问题的方法如下:
首先:
1)用如上的方法取得中文文件名:
String filename= new String(getISOFileName(part).getBytes("ISO-8859-1"),"gb2312");
然后创建文件,如果发生FileNotFoundException异常,说明取得的文件名是经过特殊编码的--我们取得到的未解码的,是乱吗,那么就要用javamail提供的函数decodeText进行解码。具体方法如下。
try{
myFileoutputstream= new FileOutputStream(filename);
}catch(FileNotFoundException fe){
try{
if (filepath.exists()){
filename = new File(filepath,MimeUtility.decodeText(getISOFileName(part)));
}catch(Exception e){
System.out.println("getpart(int i)重新生成文件:"+e.toString());
}
}catch(Exception e){
System.out.println("getpart(int i)重新生成文件:"+e.toString());
}
}
经过如上步骤,就能彻底解决javamail附件中文名乱码问题了。


可是我看的不是很懂!
请高手解释一下
如何处理以上的问题
...全文
231 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acylas 2004-08-30
  • 打赏
  • 举报
回复
=?iso-2022-jp?B?和=?=是配对的表示他们之间的字符串是用iso-2022-jp编码,
而Content-Transfer-Encoding: base64这个表示用base64编码,所以你应该先用base64解码,再用iso-2022-jp解码,
new sun.misc.BASE64Decoder().decodeBuffer()这个用于base64解码
string.getBytes("iso-2022-jp")这个用于iso-2022-jp解码
Acylas 2004-08-30
  • 打赏
  • 举报
回复
想加密很简单,读取文件流,每个byte加多1或者其它算法,或者文件流前面、后面加多几个byte就可以搞定,
推荐第一种方法,那样别人就算读用文本编辑器看也很难解得出来
eureka0891 2004-08-30
  • 打赏
  • 举报
回复
没做过取附件名的,
不过应该和处理附件名是一样的吧
取到名字后转换:
你把邮件在outlook里存为 .eml
用文本打开会有:
------=_NextPart_001_0006_01C483B3.B8EF1F40--

------=_NextPart_000_0005_01C483B3.B8EF1F40
Content-Type: application/x-msdownload;
name="=?iso-2022-jp?B?LRskQlJLGyhCLRskQmYmGyhCLRskQlpAMjs0eTFRSjhIRxsoQi5bVg==?=
=?iso-2022-jp?B?ZXJ5Q0QuY29tXS5leGU=?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="=?iso-2022-jp?B?LRskQlJLGyhCLRskQmYmGyhCLRskQlpAMjs0eTFRSjhIRxsoQi5bVg==?=
=?iso-2022-jp?B?ZXJ5Q0QuY29tXS5leGU=?="
看一下用这些描述的encode解码对不对.
kw123 2004-08-30
  • 打赏
  • 举报
回复
都很忙!!!!
stonecsdn 2004-08-28
  • 打赏
  • 举报
回复
现在比较忙,没有时间.抱歉了.你找找其它的资料,看看有没有解决的method
stonecsdn 2004-08-27
  • 打赏
  • 举报
回复

if ((temp = part.getFileName()) != null)
{
String filename="";
filename = new String(MimeUtility.decodeText(part.getFileName()).getBytes("ISO8859_1"),"GBK");
//上面已经转码,可是在下面:
public void savePart(Part part,String Filename)
{
try
{
Filename =new String(Filename.getBytes("ISO8859_1"),"GBK");
//这个地方又进行了一次转码,这样做可以吗?
我在http://community.csdn.net/Expert/topic/3284/3284891.xml?temp=.6648981中直接用的是 String filename = MimeUtility.decodeText(part.getFileName()),可能是没有考虑到中文的情况,不过你也可以直接试试
kw123 2004-08-27
  • 打赏
  • 举报
回复
期待佳音
kw123 2004-08-27
  • 打赏
  • 举报
回复
to: stonecsdn(东东)

经过改正,问题依旧!还是无法实现中文乱码的问题

你看看
http://community.csdn.net/Expert/topic/2975/2975230.xml?temp=.8000757
中回复人: cn086(清凉小雅) ( ) 信誉:100 的回答

我是按照他所写的


对了,顺便问你一下,可不可以在JAVA中自己建立一个文件名称,比如AA.CCD文件,我在里面存储信息,只有经过我的程序才能进行访问编辑,其他的任何方式不能打开,我记得VC,DELPHI可以实现。JAVA应该是可以实现的,有没有这方面的资料?(网站资料也可)

目的是为了保密的需要!你是大虾!请给予指导
kw123 2004-08-26
  • 打赏
  • 举报
回复
又没有人知道???????????????????????
kw123 2004-08-26
  • 打赏
  • 举报
回复
怎么没有人回答!!

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧