问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

乱码是什么?

发布网友 发布时间:2022-04-29 10:10

我来回答

2个回答

热心网友 时间:2022-06-25 23:57

乱码是因为不同语系操作系统之间文字编码不通用造成的,可以用南极星等软件显示乱码.基本上在javamail中碰到的中文乱码问题就这么多了,如果你的程序出现了中文乱码,首先不要惊慌,可用多个其他的邮件发送或接收程序进行验证,看是在哪个环节出现了问题,然后再仔细对照原文和乱码,调用相应的编码解码方法就行了。
在使用javamail api开发邮件服务系统时,我们常常会碰到很多中文乱码问题,下面就分别介绍如何解决这些问题。

1.发送名称含中文的附件到邮件服务器,用别的邮件接收程序接收到的附件名显示为乱码

解决办法:
在调用MimeBodyPart的setFileName()时使用Base64编码。例如:

BASE64Encoder enc = new BASE64Encoder();//该类位于jre/lib/rt.jar中
//fds为FileDataSource实例
mbp.setFileName("=?GBK?B?"+enc.encode((fds.getName()).getBytes())+"?=");

2.接收邮件时,获取某些邮件发送程序发送的email地址,发送地址显示为乱码

解决办法:
对含有中文的发送地址,使用MimeUtility.decodeTex方法,对其他则把地址从ISO8859_1编码转换成gbk编码,见下例

public static String getFrom(Message msg){
String from="";
try{
if(msg.getFrom()[0]!=null)
from=msg.getFrom()[0].toString();
if(from.startsWith("=?GB")||from.startWith(“=?gb”)){
from=MimeUtility.decodeText(from);
}else{
from=StringUtil.toChinese(from);
}
}catch(Exception e){
e.printStackTrace();
}
from=StringUtil.replaceStr(from,“<”,“<”);// replaceStr为字符串替换函数
from=StringUtil.replaceStr(from,">",">");
return from;
}

///////////////////StringUtil的toChinese方法//////////////////////////
public static String toChinese(String strvalue){
try{
if(strvalue==null)
return null;
else{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}catch(Exception e){
return null;
}
}

3.接收邮件时,获取某个邮件的中文附件名,出现乱码

解决办法:
对于用base64编码过的中文,则采用base64解码,否则对附件名进行ISO8859_1到gbk的编码转换,例如:

String temp=part.getFileName();//part为Part实例
if((temp.startsWith("=?GBK?B?")&&temp.endsWith("?="))
||(temp.startsWith("=?gbk?b?")&&temp.endsWith("?="))){
temp=StringUtil.getFromBASE64(temp.substring(8,temp.indexOf("?=")-1));
}else{
temp=StringUtil.toChinese(temp);//该方法如前所叙
}

/////////////StringUtil的getFromBASE64方法/////////

public static String getFromBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}

乱码问题的调试步骤总结:

基本上在javamail中碰到的中文乱码问题就这么多了,如果你的程序出现了中文乱码,首先不要惊慌,可用多个其他的邮件发送或接收程序进行验证,看是在哪个环节出现了问题,然后再仔细对照原文和乱码,调用相应的编码解码方法就行了。

如果还不明,请去:
http://www.zzchina.net/article/keyword/32.htm

参考资料:http://www.zzchina.net/article/26/25206.htm

热心网友 时间:2022-06-25 23:57

没错,楼主挺有幽默细胞 ···
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 50岁用什么面霜好? 有哪些适合妈妈那个年纪使用的面霜? 为什么都是乱码 怎么回事,为什么会乱码 老年人,可以用什么样的护肤品? 乱码是啥~~ 韩国人都有哪些传统习俗,和中国人有什么不同,相同点又在哪儿 知道的可... ...1、文章开头一段的某一句话在文章中的作用,中间某段或句的作用_百度... 中老年人用什么牌子的护肤霜好,要保湿效果好的。 韩国具有代表性的是什么?饮食、文化、建筑、服装和礼仪宗教信仰 韩国礼仪问题 有没有一篇记叙文包含标题作用,开头作用,结尾作用,人物形象,语句赏析的题? 有哪些韩国礼仪 韩国有哪些习俗与中国不同? 记叙文散文语段开头作用有那些 记叙文题目和开头分别有什么作用? 韩国有什么习俗? 记叙文,议论文 第一段的作用 记叙文开头的作用 韩国吃穿住行有哪些习俗 50多岁用什么面霜最好 70岁的老人适合用什么护肤品? 乱码是如何产生的?该怎么解决呢? 什么是乱码?碰到乱码,怎么把它转换成汉字? 老年人冬天适合用什么牌子的面霜 50多岁的女人适合用什么面霜 什么牌子的面霜 适合65岁的老人 美加净深层保湿霜适合多大年龄的人用呀?? 老年人用什么牌子的化妆品 老年人用什么护肤品比较好 010100096是什么电话催收 10100096是什么号码? 时空召唤九游版本QQ登录的可以转移号吗? 联通流量网速慢怎么办? 07198638119是什么催收? 0213116是什么催收电话? 联通4g手机卡流量数据怎么那么慢 03718190是什么催收 中国联通的,为什么流量上网网速很慢,怎么处理才能快一点啊? 时空召唤苹果官方版本手机被改了我用我绑定的身份证能不能找回?