JavaMail邮件附件中文乱码问题
Java中文乱码的终极解决方案

Java中文乱码的终极解决方案1. 解决HTML页面中的中文问题为了使HTML页面很好地支持中文,就必须在每个HTML页面的头部增加如下代码:<HEAD><META http-equiv="Content-Type“ content="text/html; charset=UTF-8"></HEAD>2. 解决JSP页面中的中文问题为了使JSP页面很好地支持中文,就必须在每个JSP页面的头部增加如下代码:<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>3. 解决HTTP(get/post)请求中的中文问题在默认情况下,IE浏览器发“ISO-8859-1”的编码格式发送请求,如果接收到HTTP的get请求中文参数时出现乱码,可以采用以下方法:1)对其进行Java编码转换,例如:String fieldName = new String(request.getParameter("fieldName").getBytes("ISO-8859-1"),"UTF-8");2) 通过设置Web服务器的编码来解决:a. Tomcat - 修改server.xml文件<Connector port="8080"...URIEncoding="UTF-8"/> <!--增加这项-->b. Resin - 修改resin.conf文件--Resin2.x<host id=''><character-encoding>UTF-8</character-encoding>...</host>--Resin3.x<web-app-default><character-encoding>UTF-8</character-encoding></web-app-default>4. 解决页面数据传输的中文问题为了使中文数据在各页面(组件)之间正常传递,最佳的方法就是采用编码过滤器来解决。
解析Java中文乱码的处理方法

解析Java中文乱码的处理方法【引自程序犹如人生的博客】为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。
汉语编程是怎么回事,我也不大清楚,应该是前年吧!我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他,他也不说不大清楚,最后自己对这个学习也不了了之了。
我写这个不是讲解中英文之间的差距,解码等,我是将我在这几年工作遇到各种各样的乱码的解决方法,总结起来,也希望大家能把自己晕倒解决乱码的方法都说出来,咱们弄一个解决乱码的“葵花宝典”。
对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是:1、utf8解决JSP中文乱码问题一般说来在每个页面的开始处,加入:◆charset=UTF-8的作用是指定JSP向客户端输出的编码方式为“UTF-8”;◆pageEncoding="UTF-8",为了让JSP引擎能正确地解码含有中文字符的JSP页面,这在LINUX中很有效;◆request.setCharacterEncoding("UTF-8");是对请求进行了中文编码。
有时,这样仍不能解决问题,还需要这样处理一下:2、Tomcat 5.5中文乱码只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFi lter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
2)在你的web.xml里加入如下几行:3)完成2、get方式的解决办法1)打开tomcat的server.xml文件,找到区块,加入如下一行:完整的应如下:2)重启tomcat,一切OK。
Javamail 附件中文名字乱码祥解

现在研究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进行解码。
JAVA中文字符乱码解决详解

JAVA中⽂字符乱码解决详解⾸先要了解JAVA处理字符的原理。
JAVA使⽤UNICODE来存储字符数据,处理字符时通常有三个步骤:– 按指定的字符编码形式,从源输⼊流中读取字符数据– 以UNICODE编码形式将字符数据存储在内存中– 按指定的字符编码形式,将字符数据编码并写⼊⽬的输出流中。
所以JAVA处理字符时总是经过了两次编码转换,⼀次是从指定编码转换为UNICODE编码,⼀次是从UNICODE编码转换为指定编码。
如果在读⼊时⽤错误的形式解码字符,则内存存储的是错误的UNICODE字符。
⽽从最初⽂件中读出的字符数据,到最终在屏幕终端显⽰这些字符,期间经过了应⽤程序的多次转换。
如果中间某次字符处理,⽤错误的编码⽅式解码了从输⼊流读取的字符数据,或⽤错误的编码⽅式将字符写⼊输出流,则下⼀个字符数据的接收者就会编解码出错,从⽽导致最终显⽰乱码。
这⼀点,是我们分析字符编码问题以及解决问题的指导思想。
好,现在我们开始⼀只只的解决这些乱码怪兽。
⼀、在JAVA⽂件中硬编码中⽂字符,在eclipse中运⾏,控制台输出了乱码。
例如,我们在JAVA⽂件中写⼊以下代码:String text = “⼤家好”;System.out.println(text);如果我们是在eclipse⾥编译运⾏,可能看到的结果是类似这样的乱码:。
那么,这是为什么呢?我们先来看看整个字符的转换过程。
1. 在eclipse窗⼝中输⼊中⽂字符,并保存成UTF-8的JAVA⽂件。
这⾥发⽣了多次字符编码转换。
不过因为我们相信eclipse的正确性,所以我们不⽤分析其中的过程,只需要相信保存下的JAVA⽂件确实是UTF-8格式。
2. 在eclipse中编译运⾏此JAVA⽂件。
这⾥有必要详细分析⼀下编译和运⾏时的字符编码转换。
– 编译:我们⽤javac编译JAVA⽂件时,javac不会智能到猜出你所要编译的⽂件是什么编码类型的,所以它需要指定读取⽂件所⽤的编码类型。
Java中文乱码的解决方案

Java中文乱码的解决方案jsp+Servlet的形式,在jsp页面向后台发送的请求里包含中文时,后台采用String name = request.getParameter("name")接收到的是乱码,我在网上找了很多资料,有网友说request.getParameter是默认采用ISO8859-1来编码的,必须进行转换:我总结了一下,解决中文乱码大概有以下几种方式:1、采用decode()方法.URLDecoder.decode(s)2、采用设置字符集的方式request.setCharacterEncoding("utf-8");3、在页面上定义charset的字符集<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8">4、在web.xml文件里定义编码,同时在CoreFilter类里定义编码为utf-8<filter><filter-name>encodingFilter</filter-name><filter-class>com.demo.filter.CoreFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>5、在form表单里定义编码accept-charset="utf-8" onsubmit="document.charset='utf-8';"6、更改ContentTypes的值改变myeclipse里ContentTypes的值为utf-87、改变tomcat字符集通过改变server.xml文件里的字符集来接收中文8、采用转码的方式nameCode = new String(request.getParameter("name").getBytes("ISO8859-1"),"UTF-8");补充:如果是Servlet向页面发送的数据中包含中文,可以采用如下方式解决:response.setContentType("text/html;charset=utf-8");。
邮件乱码

造成邮件乱码的原因很多,但归纳起来不外乎有三种情况:一是操作系统和使用的软件设置不同导致的;二是发送邮件时发送程序采用不同的编码标准,如UU、MIME、BINHEX等,而你所用的操作系统程序没有能力将其解码,收到的邮件像“天书”一般;三是邮件传输邮局主机的原因,如有的主机(特别是国外的)不支持非ASCII码,将中文双字节或二进制格式邮件中每个字符的第八位过滤掉,使该信息与初始信息截然不同,造成邮件信息失真或损坏。
当你收到乱码邮件后,如果让对方重发一次,既浪费时间,又显得你“露怯”,不如通过尝试以下方法自行解码:1.根本设置对Outlook Express 进行根本设置,可彻底解决电子邮件的乱码。
打开Outlook Express 后,选择“工具”→“选项”命令,单击“阅读”标签,再单击“字体”按钮,选择“简体中文(GB2312)”,同时把它设置为默认值。
接下来,单击“国际设置”按钮,选中“为接收的所有的邮件使用默认的编码”,确定退出。
如此设置后,当你打开所有邮件,通常都不会再出现乱码了。
2.选项查看通常情况下,没有进行上述邮件设置,导致邮件乱码情况居多。
在Outlook Express中,选择乱码邮件后,单击“查看”→“编码”→“简体中文(GB2312)”或“其他”→“简体中文(HZ)”,邮件内容即可展现。
3.转寄再收如仍显示乱码,可试着将乱码邮件转寄到自己的邮箱中,然后用Outlook Express接收,有时即可顺利解码。
4.改名重读仍然不行可将邮件改名,存成一个后缀名为.eml的文件,由Outlook Express打开一般都可以自动解码。
5.追根溯源对于采用不同编码标准产生的乱码邮件,解码工作比较专业,说起来会很生涩。
我们不妨选择乱码邮件后,右键单击鼠标,在弹出的快捷菜单中选择“属性”命令,接着在出现的对话框中单击“详细资料”标签,再单击“邮件源文件”按钮,这时就会打开邮件源文件码,邮件内容显现。
为什么有时会收到乱码的电子邮件

为什么有时会收到乱码的电子邮件电子邮件是我们日常生活中不可或缺的一部分,它已经成为了我们最普遍的沟通方式之一。
在使用电子邮件时,我们可能会遇到各种各样的问题,其中之一就是收到了乱码邮件。
那么,为什么我们有时会收到乱码电子邮件呢?下面我们从几个方面来分析。
一、发件人使用的邮件客户端与我们不兼容电子邮件的发送和接收需要遵守一定的标准,这些标准和协议确保了待发送的邮件在各种不同的电子邮件系统之间能够无障碍地传递。
但是,不同的邮件客户端实现了不同的标准,有时候它们之间可能无法彼此兼容。
如果发件人使用的邮件客户端与我们不兼容,我们就有可能收到乱码邮件。
这是因为从发件人的电子邮件客户端发出的原始邮件被我们的客户端解读为乱码。
二、邮件内容设计不当邮件中包含了丰富的文本、图片、视频、音频等内容。
如果这些内容没有在邮件中嵌入或者以附件的形式添加,那么当我们收到这样的邮件时,我们的邮件客户端无法解读邮件中包含的内容,从而导致邮件出现乱码。
同时,如果发件人使用了一些非标准的字符集编码,也可能会导致我们收到乱码邮件。
三、传输过程中出现了问题电子邮件是通过一系列的服务器进行传递的,如果在传输过程中出现了问题,那么邮件可能会出现损坏、缺损或乱码等情况。
传输过程中可能会存在一些不稳定的因素,例如网络延迟、丢包等问题。
另外,邮件可能还会被黑客或垃圾邮件过滤器拦截、篡改或破坏,在这些情况下,我们也可能会收到乱码邮件。
四、系统或软件故障有时邮件客户端或操作系统本身存在一些故障或错误,导致邮件显示为乱码或不可读。
如果我们正在使用一个已知的有错误的邮件客户端或操作系统版本,那么这些错误可能会导致我们收到乱码邮件。
五、人为错误最后,我们也不能排除人为错误的可能性。
例如,如果我们没有正确设置邮件客户端的语言设置或字符集编码,那么我们就有可能收到乱码邮件。
同时,如果我们手动编辑邮件而没有正确使用字符集编码,那么我们的邮件也会出现乱码。
总结:在电子邮件的使用过程中,我们有可能会遇到收到乱码邮件的情况。
邮件乱码的种类

PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
MIME编码错误所造成乱码的形式,比如邮件内容变为:
……
=A8=C3=A7@=A6=B9=B5=DF=AA=BA=A7=DC=A5 =CD=AF=C0=C3=C4=AA=AB=B7P=A8=FC=A9=CA=B8=D5 =C5=E7,=B1o=A8=EC=B3=CC=A6=B3=AE=C4=A7=ED=B5 =DF=A9=CE=B1=FE=B5=DF
PT09IA0K5Zyw44CA44CA5Z2A77ya5YyX5Lqs5biC5Lic5Z+O5Yy66byT5qW85aSW5aSn6KGXMjfl
------(Base 64传输编码格式)
原文地址:/Chinese/Help/20092/HelpMain5_Main5.html
------(Quoted-Printable传输编码格式)
或者是:
------
5bel56iL5biIOg0KICAgIOS9oOWlvSHpmYTku7bkuK3mmK/lrqLmiLflj43mmKDnu5nlkrHku6zk
vIHkuJrpgq7nrrHlj5Hkv6HlkI7lr7nmlrnpgq7nrrHmlLbliLDnmoTpgIDkv6Es6K+35biu5b+Z
默认语系不同所造成的乱码形式,比如邮件内容变为:
------
?耀耀鸅鸅耀 耀?鶳?耀耀鸅鸅耀耀?鶳 ??F¥[2`±z1i-O?H?A|i?IAOao?F﹐N!Aoo?U?A?H3]-p!i|
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JavaMail附件中文名称乱码
问题: 用Javamail发邮件到邮件服务器,从邮箱中查看发现附件的中文名称变成了密码原因:不明
解决:在设置邮件附件的时候调用javax.mail.internet.MimeUtility来编码, 例如
MimeMessagemsg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = { new InternetAddress(to) };
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
// create and fill the first message part
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(msgText1);
// create the second message part
MimeBodyPart mbp2 = new MimeBodyPart();
// attach the file to the message
mbp2.attachFile(filePath);
mbp2.setFileName(MimeUtility.encodeWord(fileName));
// create the Multipart and add its parts to it
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// add the Multipart to the message
msg.setContent(mp);
// set the Date: header
msg.setSentDate(new Date());
/*
* If you want to control the Content-Transfer-Encoding of the
* attached file, do the following. Normally you should never need
* to do this.
*
* msg.saveChanges(); mbp2.setHeader("Content-Transfer-Encoding",
* "base64");
*/
// send the message Transport.send(msg);。