java 判断非ascii字符_文件名中的JavaMail和非ASCII字符

我可以在

JavaMail中发送具有非ascii文件名的附件,但我无法下载它们.我特意为那些文件名包含非ascii字符的附件获取java.io.FileNotFoundException.

仅供参考:我正在使用类似messageBodyPart.setFileName(MimeUtility.encodeText(filename [i]))来编码文本和MimeUtility.decodeText(bodyPart.getFileName())来解码非ascii文件名

这有解决方法吗?

编辑

@Bill,这是我的代码的一部分,读取附件.我还在我的代码中添加了properties.setProperty(“mail.mime.decodeparameters”,“true”)和properties.setProperty(“mail.mime.decodefilename”,“true”)属性.

if (message[a].getContent() instanceof MimeMultipart) {

Multipart multipart = (Multipart) message[a].getContent();

for (int i = 0; i < multipart.getCount(); i++) {

bodyPart = multipart.getBodyPart(i);

disposition = bodyPart.getDisposition();

if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT) || (disposition.equals(BodyPart.INLINE)))) {

DataHandler handler = bodyPart.getDataHandler();

String path = bodyPart.getFileName();

String[] str = path.split("/");

String fileName = str[str.length - 1];

String filePath = ReadConfigPropertiesFile.getPropertyValue("server.buildpath");

System.out.println(fileName);

File tempDir = new File(filePath + user);

if (!tempDir.exists()) {

tempDir.mkdir();

}

File saveFile = new File(tempDir + "/" + fileName);

int count = 0;

while (saveFile.exists()) {

count++;

saveFile = new File(tempDir + "/" + count + "_" + fileName);

}

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile));

byte[] buff = new byte[2048];

InputStream is = bodyPart.getInputStream();

int ret = 0;

while ((ret = is.read(buff)) > 0) {

bos.write(buff,ret);

}

bos.close();

is.close();

//System.out.println(bodyPart.getContentType());

}else {

//display body (message) of the attachment;

//System.out.println(bodyPart.getContent().toString());

}

}

}

上面的代码在BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile))行引发了F​​ileNotFoundException异常,并且对于文件名为非ascii字符的附件(类似于ሰላም.pdf)引发了这种情况.其他一切都很好.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值