java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)
Javamail 中附件中文名字乱码祥解 (转)[@more@]现在研究JavaMail的人越来越多,现在我就谈谈在javamail中大家都会遇到的附件中文问题,由于sun的java的中文问题,导致当附件是中文时将出现乱码,导致程序异常,如何避免呢??我在学习javamail时采用如下方法首先对邮件体进行分析,首先判断邮件体是否有附件:
object out_content = message[i].getContent();
if (!(out_content instanceof Multipart)){//不是复合邮件体,既是不带附件。
partname = new String[0];
return partname;
}
如果是复合邮件体,那么就可以调用如下的方法取得中文文件名:
public static String getISOFileName(Part body){
//设置一个标志,判断文件名从Content-Disposition中获取还是从Content-Type中获取
boolean flag=true;
if(body==null){
return null;
}
String[] cdis;
try{
cdis=body.getHeader("Content-Disposition");
}
catch(Exception e){
return null;
}
if(cdis==null){
flag=false;
}
if(!flag){
try{
cdis=body.getHeader("Content-Type");
}
catch(Exception e){
return null;
}
}
if(cdis==null){
return null;
}
if(cdis[0]==null){
return null;
}
//从Content-Disposition中获取文件名
if(flag){
int pos=cdis[0].indexOf("filename=");
if(pos<0){
return null;
}
//如果文件名带引号
if(cdis[0].charAt(cdis[0].length()-1)=='"'){
return cdis[0].substring(pos+10,cdis[0].length()-1);
}
return cdis[0].substring(pos+9,cdis[0].length());
}else{
int pos=cdis[0].indexOf("name=");
if(pos<0){
return null;
}
//如果文件名带引号
if(cdis[0].charAt(cdis[0].length()-1)=='"'){
return cdis[0].substring(pos+6,cdis[0].length()-1);
}
return cdis[0].substring(pos+5,cdis[0].length());
}
}
但是有一种情况下,取得的中文文件名也是乱码,原因有的邮件服务器在发送邮件时,对附件名进行了特殊的编码,解决如上问题的方法如下:
首先:
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附件中文名乱码问题了。
祝你好运,如果还有任何疑问,欢迎切磋,我的邮件:wangjm@sinosoft.com.cn.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-993283/,如需转载,请注明出处,否则将追究法律责任。
java邮件附件名称乱码_Javamail 中附件中文名字乱码祥解 (转)相关推荐
- linux minicon乱码,路径中带中文出现乱码问题
路径中带中文出现乱码问题 來源:互聯網 2016-05-28 09:34:21 評論 路径中带中文出现乱码问题做项目的时候我们可能会遇到需要使用路径传参数的问题,如果参数是数字或者英文,那肯定不会 ...
- safari浏览器附件下载文件中文名字乱码(转) || 苹果IOS 微信浏览器预览PDF乱码 解决方案(转)
苹果浏览器下载pdf文件中文名字乱码就是返回报文头要改一下 如果是一个文件地址或者是一个路径,那么前后端交互方式也要改一下,改为get请求即可,后端返回一个二进制数据或者直接outputStream. ...
- java ssh乱码_SSH框架下中文字符乱码问题的研究
1 Java中文乱码问题的产生原因 在Java Web的应用中,中文字符乱码问题是个由来已久和让人头疼的问题,尤其是刚刚接触Java Web编程的人员,往往在解决中文字符乱码问题上花费了大量的时间和精 ...
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面 Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url ...
- 取出Cookie中的中文显示乱码解决方法。经验证第三种方法有效。
取出Cookie中的中文显示乱码解决方法 HttpUtility.UrlEncode(Response.Cookies[ "newcookie "].Values); HttpU ...
- 解决ubuntu下crossover中qq中文字体乱码问题
本文适应于ubuntu16.04,crossover16.2.0-1.(如使用qq推荐使用腾讯qq8.9-2,点击下方的安装windows软件,在输入框输入"qq"两字即可看到) ...
- vs2012编程中输出中文出现乱码
关于"vs2012编程中输出中文出现乱码"问题的探究 问题如下: //代码如下// #include<iostream> using namespace std; in ...
- linux crossover 乱码,解决ubuntu下crossover中qq中文字体乱码问题
本文适应于ubuntu16.04,crossover16.2.0-1.(如使用qq推荐使用腾讯qq8.9-2,点击下方的安装windows软件,在输入框输入"qq"两字即可看到) ...
- jmeter-察看结果树-响应数据中的中文显示乱码
jmeter-察看结果树-响应数据中的中文显示乱码 jmeter\bin\jmeter.properties 默认编码为:ISO-8859-1 # The encoding to be used if ...
最新文章
- C语言网络编程:close或者shutdown断开通信连接
- 文巾解题 1480. 一维数组的动态和
- UVa 11383 少林决胜(二分图最佳完美匹配)
- 配置文件中有“路径信息”时,需呀注意的问题(路径中的\是转义字符)~
- 如何c51和mdk共存兼容_如何使用无线技术控制大功率快速充电
- 【信号检测】基于隐马尔可夫模型HMM算法实现睡眠状态检测matlab代码
- Jade linux 位置,jade 6.5 安装教程
- python+pyecharts实现中国省份地图可视化
- 陶渊明《移居》二首的赏析
- 5-22近期工作总结、下一步工作安排及技术知识
- 笑声的音效素材,几百个你想要的都在这
- 下载编译chromium
- OpenGL显示枫叶蝴蝶,无聊作品
- 费用报销与对公付款电子化管理系统:iBox+RPA已形成自动化闭环
- 实现人rou搜索的10个经典方法
- 『NLP自然语言处理』中文文本的分词、去标点符号、去停用词、词性标注
- js中数组的几种循环方式
- 辰视智能携手大族机器人亮相深圳工业展暨22届SIMM深圳机械展
- 史上最强的美名腾智能起名成功发布
- Java获取国内各个地区实时天气
热门文章
- Spark SQL应用解析
- Java工程师学习指南 中级篇
- 宝宝树发行价为6.8港元 11月27日在港交所正式挂牌
- Python数据科学平台Anaconda的最新发布中增加了Microsoft VS Code
- git did not exit cleanly (exit code 128)
- nginx配置不记录指定文件类型日志
- webpack4搭建vue
- transport方式连接Elasticsearch6.2.3
- laravel框架之自帶登錄註冊
- HDU 6356.Glad You Came-线段树(区间更新+剪枝) (2018 Multi-University Training Contest 5 1007)...