⑴ 页面乱码问题怎么解决
1.第一个地方的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,“我是个好人”也会出现乱码。必须一致才可以。
第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。
2.表单使用Post方式提交后接收到的乱码问题
这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
A,接受参数时进行编码转换
String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-
8") ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
B,在请求页面上开始处,执行请求的编码代码, request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String str = request.getParameter("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。
C,为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp。
现在将常见的乱码问题分为JSP页面显示中文乱码、表单提交乱码两类。
1)JSP页面中显示中文乱码
在JSP文件中使用page命令指定响应结果的MIME类型,如<%@ page language="java"
contentType="text/html;charset=gb2312" %>
2)表单提交乱码
表单提交时(post和Get方法),使用request.getParameter方法得到乱码,这是因为tomcat处理提交
的参数时默认的是iso-8859-1,表单提交get和post处理乱码问题不同,
下面分别说明。
(1)POST处理
对post提交的表单通过编写一个过滤器的方法来解决,过滤器在用户提交的数据被处理之前被调用
,可以在这里改变参数的编码方式,过滤器的代码如下:
Java代码
CharacterEncodingFilter.java:
public class CharacterEncodingFilter implements Filter
{
protected String encoding = null;
public void init(FilterConfig filterConfig) throws ServletException
{
this.encoding = filterConfig.getInitParameter("encoding");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) throws IOException, ServletException
{
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);
chain.doFilter(request, response);
}
}
web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2) Get方法的处理
tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设
置。
打开<tomcat_home>\conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置
部分,给这个组件添加一个属性:URIEncoding="GBK"。修改后的Connector设置
为:
Java代码
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" <SPAN style="COLOR:
#ff0000">URIEncoding="GBK"</SPAN> />
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />
*注意修改后重新启动tomcat才能起作用。
/***********************************************************过滤器的使用
*******************************************************/
3,表单get提交方式的乱码处理方式。
如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码
格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导
致接受页面得到的参数为乱码/、。
解决办法:
A,使用上例中的第一种方式,对接受到的字符进行解码,再转码。
B, Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则
需要在server.xml的Connector节点增加useBodyEncodingForURI="true"
属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用
request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为
utf-8,接受页面正常接受就可以了。
但我认为真正的编码过程是,tomcat又要根据
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" URIEncoding=”UTF-8”/>
里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会
有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来
进行解码的。
4,上传文件时的乱码解决
上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。
如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期
commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是
tomcat缺省编码格式iso-8859-1。但出现的乱码问题是:句号,逗号,等特殊符号
变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。
解决方式:下载commons-fileupload-1.1.1.jar这个版本的jar已经解决了这些bug。
但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以
及字符。
5,Java代码关于url请求,接受参数的乱码
url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。如果设定了这个编码格式,则意味着
所有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱
码,例如
一个链接Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用
String name = request.getParameter("name");得到的就是乱码。因为规定了必须是utf-8才可以
,所以,这个转向应该这样写:
Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。
如果不设置这个参数URIEncoding=”UTF-8”,会怎么样呢?不设置则就使用了缺省的编码格式
iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正
常解析,如果使偶数个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就
能正常解析,但中文的标点符号仍出现乱码。权宜之计,如果您的参数中没有中
文标点符号,则可以在参数值最后加一个英文符号来解决乱码问题,得到参数后再去掉这个最后面
的符号。也可以凑或使用。
6,脚本代码关于url请求,接受到的参数乱码
脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果
这个汉字参数不进行URIEncoding=”UTF-8”所指定的编码处理,则接受页面接受
到的汉字也是乱码。脚本处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的
方法对汉字进行编码即可。
7,关于jsp在MyEclipse中打开的乱码问题
对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使
用的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比
较容易解决,直接到eclipse3.1的偏好设置里面找到general-〉edidor,设置为您的文件打开编码
为utf-8即可。Eclipse会自动重新以新的编码格式打开。汉字即可正常显示。
8,关于html页面在eclipse中打开出现乱码情况
由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。
一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可
但我认为真正的编码过程是,tomcat又要根据
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" URIEncoding=”UTF-8”/>
里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会
有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的。
4,上传文件时的乱码解决
上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。
如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期
commons-fileupload.jar有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是
tomcat缺省编码格式iso-8859-1。但出现的乱码问题是:句号,逗号,等特殊符号
变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。
解决方式:下载commons-fileupload-1.1.1.jar这个版本的jar已经解决了这些bug。
但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码。已经能得到正常所有汉字以
及字符。
5,Java代码关于url请求,接受参数的乱码
url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。如果设定了这个编码格式,则意味着
所有到url的汉字参数,都必须进行编码才可以。否则得到的汉字参数值都是乱
码,例如
一个链接Response.sendDerect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用
String name = request.getParameter("name");得到的就是乱码。因为规定了必须是utf-8才可以
,所以,这个转向应该这样写:
Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”);才可以。
如果不设置这个参数URIEncoding=”UTF-8”,会怎么样呢?不设置则就使用了缺省的编码格式
iso8859-1。问题又出来了,第一就是参数值的个数如果是奇数个数,则就可以正
常解析,如果使偶数个数,得到最后字符就是乱码。还有就是如果最后一个字符如果是英文,则就
能正常解析,但中文的标点符号仍出现乱码。权宜之计,如果您的参数中没有中
文标点符号,则可以在参数值最后加一个英文符号来解决乱码问题,得到参数后再去掉这个最后面
的符号。也可以凑或使用。
6,脚本代码关于url请求,接受到的参数乱码
脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果
这个汉字参数不进行URIEncoding=”UTF-8”所指定的编码处理,则接受页面接受
到的汉字也是乱码。脚本处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的
方法对汉字进行编码即可。
7,关于jsp在MyEclipse中打开的乱码问题
对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使
用的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比
较容易解决,直接到eclipse3.1的偏好设置里面找到general-〉edidor,设置为您的文件打开编码
为utf-8即可。Eclipse会自动重新以新的编码格式打开。汉字即可正常显示。
8,关于html页面在eclipse中打开出现乱码情况
由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。
一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可
在使用JSP的过程中,最使人头疼的一个问题就是中文乱码问题,以下是我在软件开发中遇到的乱码
问题以及解决方法。
1、JSP页面乱码
这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下
面代码指定字符集编码即可,<%@ page contentType="text/html; charset=utf
-8" %>
2、数据库乱码
这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
在数据库连接字符串中加入编码字符集
String Url="jdbc:mysql://localhost/digitgulf?
user=root&password=root&useUnicode=true&characterEncoding=utf-8";
并在页面中使用如下代码:
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
3、中文作为参数传递乱码
当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
以上为现阶段遇到的乱码问题,乱码的核心问题还是字符集编码问题,我之前也就是被页面的乱码给困惑了很久感觉这个还是挺有用的就给大家分享下。
⑵ 如何消除电脑乱码
一、乱码有五种类型
常见的乱码,一般可以分成五种类型:第一类是文本/文档文件乱码,这一般是由于源文件编码,与Windows使用的编码不通用造成的;第二类是网页乱码,形成原因与第一类乱码类似;第三类是Windows系统界面乱码,即中文Windows的菜单、桌面、提示框等显示乱码,主要是Windows注册表中有关字体的部分设置不当引起的;第四类是应用程序的界面乱码,即各种应用程序(包括游戏)本来显示中文的地方出现乱码,形成原因比较复杂,有第二类的乱码原因,也可能是软件用到的中文链接库,被英文链接库覆盖造成的;第五类是邮件乱码,形成原因也极其复杂。
二、如何消除应用程序的界面乱码?
目前有些软件发行了Unicode版本,这是一种通用的字符编码标准,涵盖了全球多种语言及古文和专业符号,这种版本的软件运行在任何系统和语言上都不会乱码,如果是非Unicode编码的程序,就会有乱码现象。
【形成原因】:原因有三种。如果是由于Windows注册表中关于字体设置的信息不正确造成的,你可以用下面“如何消除Windows系统界面乱码”介绍的办法去解决;如果用上法解决不了,那就可能是由于软件的中文链接库,被英文链接库覆盖而引起的。这种现象经常发生在用微软开发工具例如VB、VC开发的中文软件上,这类软件中,菜单等显示界面上的汉字都是受一个动态链接库(DLL文件)控制,而软件的这个动态链接库一般安装在WindowsSystem目录下,如果以后安装了某个英文软件也使用同名的动态链接库,则英文软件的动态链接库就会覆盖中文链接库,这样,运行中文软件时就会调用英文的动态链接库,因此出现乱码。解决办法:重新安装中文软件,恢复中文动态链接库即可。
如果以上方法也无济于事,对于Win9X/ME系统,你可以安装使用MagicWin98(下载地址http://www.skycn.com/soft/3047.Html)、南极星等内码转换软件,转换内码后即可消除乱码;对于WinXP系统,建议使用微软多语言支持工具MicrosoftAppLocale(下载地址http://www.skycn.com/soft/12582.html),利用它为指定程序设置相应的语言区域,这样也可消除乱码。
三、如何消除文本/文档文件乱码?
【形成原因】:一般是由于文档采用的字符集,系统不支持造成的。例如繁体中文的文档显示在简体中文系统下,或者相反的情况,就会造成文档显示时乱码。只要你内码转换正确,例如把原本是繁体的内码,转换为简体内码(或者相反),即可消除乱码。
【解决办法】:有以下四种解决办法:
1、使用Word2003/XP转换内码
Word2003/XP支持众多的语言,可以正确显示非Unicode类型的文本文件,单击“工具”菜单下的“语言”/设置语言,你可以把默认语言设置成非中文,例如日语,这样Word就可以正确显示日文了。
当然你也可以用它进行简体中文与繁体中文之间的转换工作,如果文件有乱码,你转换一下即可消除。例如要把繁体中文转换为简体中文,方法是:选择要转换内码的文件,在弹出的对话框中(如下图),选择“其他编码”中的“繁体中文(BIG5)”一项,打开此文件时就不会出现乱码。
2、使用Word2003/XP无乱码保存
在Word2003/XP中,当保存时选择“文件”中的“另存为”,先存为“WORD”文档,存盘后打开再存为纯文本等其他格式;或者在菜单栏中选择“工具/语言/中文简繁转换”,内码转换以后再保存。
3、使用内码转换工具
除此之外,使用内码转换工具也可以消除此类乱码,你只要对BIG5(繁体中文)和GB2312(国标码、简体中文)进行相互转换即可实现。常用的内码转换工具有:
·磁盘阵列(Disk Array)原理
4、使用WPS2000转换内码
WPS2000也能转换内码,支持GB2312、BIG5、GBK等三种主要的汉字编码,并可在输出RTF、TXT、HTM格式文件时对内码进行转换。 四、如何消除网页乱码?
【形成原因】:网页乱码是浏览器(IE等)对HTML网页解释时形成的,如果网页制作时编码为A,浏览器却以编码B显示该网页,就会出现乱码,因此只要你在浏览器中也以编码A显示该网页,就会消除乱码。
例如网页的代码中有形如:〈HTML〉〈HEAD〉〈META CONTENT=“text/html;charset=ISO-8859-1”〉〈/HEAD〉的语句,浏览器在显示此页时,就会出现乱码,因为浏览器会将此页语种辨认为“欧洲语系”。
【解决办法】:有以下四种解决办法:
1、在浏览器中选择“编码”菜单
事先为浏览器安装多语言支持包(例如在安装IE时要安装多语言支持包),这样当浏览网页出现乱码时,即可手工更改此类网页的编码方式,在浏览器中选择菜单栏下的“查看”/“编码”/“自动选择”/简体中文(GB2312),如为繁体中文则选择“查看”/“编码”/“自动选择”/繁体中文(BIG5),其他语言依此类推,选择相应的语系,这样便可消除网页乱码现象。
2、修改网页代码
用FrontPage等软件打开出现乱码的网页,修改该网页代码,在以下句子中
〈META CONTENT=“text/html;charset=ISO-8859-1”〉,将语种“ISO-8859-1”改为GB2312,如果是繁体网页则改为BIG5。
3、无乱码保存网页
用浏览器打开该网页,在“查看”/“编码”中选择“自动选择”,存盘时保存类型选“WEB页”,编码选择“UNICODE”,这样保存过的网页再次打开时,在浏览器菜单“查看”/“编码”中不管选择简体中文(GB2312)、简体中文(HZ)还是UNICODE(UTF-8)或繁体中文(BIG5),最终显示都不会出现乱码。
4、使用多内码显示软件
使用多内码显示软件来转换内码,也可以消除乱码。常用多内码显示软件有:
五、如何消除Windows系统界面乱码?
【形成原因】:这类乱码是由于Windows注册表中关于字体部分配置不正常造成的,即使您用内码翻译软件(如南极星、MagicWin98等)处理也不会消除。
【解决办法】:在Windows注册表中,恢复关于字体部分的正确设置。
1、利用显示正常的电脑
假如有一台Windows版本相同、显示正常的电脑可以利用,你可以如下步骤进行恢复:在正常机器上选择“开始”/“运行”,在对话框中键入“REGEDIT”,打开注册表编辑器;光标定位到“HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC”,选择“注册表/导出注册表文件”,选择“分支”,导出该分支注册表信息到文件(如LI.REG)中(如下图);把LI.REG文件COPY到显示乱码的机器上,在显示乱码机器上运行REGEDIT,选择“注册注册表”/“导入注册注册表”,把LI.REG文件导入注册表中。
2、在显示乱码的电脑上操作
如果没有显示正常的电脑可以利用,就需要您手工恢复字体部分注册表项,方法有以下两种:
第一种方法:用记事本编辑一个文件,然后保存为扩展名“REG”(文件名随意),再用鼠标右键单击这个文件,在右键菜单中选择合并,即可完成对注册表的改动。该文本文件的内容如下:
REGEDIT4
[HKEY_LOCAL_]
[HKEY_LOCAL_Associated DefaultFonts]
"assocSystemFont"="simsun.ttf"
"FontPackageDontCare"="宋体"
"FontPackageRoman"="宋体"
"FontPackageSwiss"="宋体"
"FontPackageModem"="宋体"
"FontPackageScript"="宋体"
"FontPackageDecorative"="宋体"
[HKEY_LOCAL_Associated CharSet]
"ANSI(00)"="yes"
"SYMBOL(02)"="no"
"OEM(FF)"="yes"
"GB2312(86)"="yes" 第二种方法:在出现乱码的电脑上,单击菜单“开始”/运行,键入REGEDIT打开注册表;找到“HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC”,正常情况下会有ASSOCIATED DEFAULTFONTS、ASSOCIATED CHARSET两个文件夹,这些文件夹中正确的参数如下表所示:
·磁盘阵列(Disk Array)原理
当出现汉字乱码时,上述两个文件夹中内容就会不完整,有的没有ASSOCIATED CHARSET文件夹、或其中内容残缺不全;有的ASSOCIATED DEFAULTFONTS下内容残缺。只要你打开注册表,在“HKEY_LOCAL_”下,根据以上正确内容恢复即可。
六、如何消除邮件乱码?
邮件乱码的形成原因很多,主要有以下几个方面,针对以下几种形成原因,应该采取不同的乱码消除方法:
1、收发信双方的语种不同导致的
收发双方使用的操作系统的不同,可以造成乱码。比如发件人使用的是日文的Windows,而收件人使用的是简体中文的Windows,这样的邮件当然会造成乱码。对于中文电子邮件,如果收信方所用的操作系统是英文环境、而且没有外挂中文系统或未切换为中文(如南极星等)编码方式,也会无法看到中文、只可见乱码。所有的双字节字符(如中文简/繁体的GB和BIG5码及日文的JIS、EUC和朝鲜文的 KSC码等)在非本语种操作系统下都会出现乱码;同样在中文简体的GB码环境下,看其他双字节字符时也只能看到乱码。
【解决办法】:安装多语言支持包或使用多内码显示平台(如南极星等),对收到的邮件,根据其使用的语种切换到相应的编码方式即可消除乱码。
2、发信服务器不支持8位(非ASCII码格式)传输
邮件传输机制或邮件编码的不同,可能造成邮件服务器不支持8位(非ASCII码格式)传输而形成邮件乱码。例如直接发送中文或二进制等非ASCII码格式的邮件(如中文双字节文件、图片文件.jpg、可执行文件.exe或压缩文件.zip等二进制文件)时,邮件服务器有可能无法处理,便把信件中每个字符的第八位都过滤掉,从而造成邮件信息的失真或损坏,在收到邮件时就是一堆乱码。
【解决办法】:只能由发件人解决。当发送8位格式的文本文件时,必须事先进行编码,将文件转换为7位ASCII码或更少位数的格式,然后才能保证文件的正确传送。收件人收到7位或更少位格式的邮件后,可以再转换为8位的格式,这样就可避免乱码。
3、收发端用的EMAIL软件和设置不同
一般EMAIL软件的"附件"功能都可以自动对信件先进行编码,然后送出。这样只要收信人使用的EMAIL软件(如Outlook XP等)能区别信件的编码方式,即可自动将信件解码。如果收发件人所用的EMAIL软件默认配置不同、收发件人自己定制的一些选项不同,在收到编码的信件后,系统就未必能识别出信件所用的编码方法,自然也无法自动解码,这样就会出现乱码。
【解决办法】:如果你用OE收中文邮件,看到的是一篇乱码,可以查一下“查看”-“编码”下,是否选了“简体中文(GB2312)”,选对了就不会有问题。
此外,你也可以用WinZip+IE来解码,方法是:把乱码邮件的内容,拷贝到剪贴板中,然后将其粘贴到记事本中,存为文本文件(例如LI.txt),再将其后缀改为.uue(改为LI.uue),点击此文件,会启动Winzip,然后启动IE,把Winzip中的001.txt文件拖到IE窗口中,就会显示邮件原来的内容,而不会看到乱码。 4、Email软件不能识别邮件的编码方法
邮件的编码方式主要有:Uuencode、Base64 encode、QP-encode、BINHEX等。如果Email软件不能识别邮件的编码方法,就会显示邮件时出现乱码。因此,你可以根据邮件中的关键字符判断编码方法,选取合适的解码软件进行解码。
(1)、QpencodeQP编码
该编码全称“Quoted-Printable Content-Transfer-Encoding”,因为这种格式邮件的内容都是ASCII字符集中可以打印的字符,所以名称中含有printable。大体格式为:=A1A=B1z=A6n=A1I=A7=DA=A6b=BA=F4=B8=F4=A4W=B1o......=E5==ABH=A5=F3=B0=DD=C3D=B1M=Aea=A1A......
特征:内容通常有很多等号"=",因此不需要看"信头"也可以判断是否为QP编码。
解码办法:把邮件中类似A1A=B1z=A6n…的部分编码全部复制下来,贴到一个新的纯文本文件中,然后在文件头部加入Quoted-pintable格式的文件头:
Contenet-Type:text/plain;Charset=”GB2312”
Content-Transfer-Encoding;Quoted-pintable
然后以“EML”为后缀保存文件,用资源管理器双击打开文件即可显示正确的内容。如果还有部分汉字乱码,可以用WINZIP对存盘后的EML文件进行解压,即可看到正确的内容。
(2)MIME/BASE64 encode编码
该编码方式将3个字节(8位)用4个字节(6位)表示,由于编码后的内容是6位的,因此可避免第8位被截掉,大体格式为:
MIME-Version:1.0
Content-Type:text/plain; charset="us-ascii"
Content-Transfer-Encoding:base64
Status:R +sXqsT6Skp OWrSKXzs
N3DRLFNrmGhQQ0Kq1+sTqq6vdCx
......。
特征:乱码前一般有如下几部分"信头":Content-Type(内容类型)、charset(字符集)及Content-Transfer-Encoding(内容传输乱码方式)。
解码办法:用EMAIL软件,选择编码中BASE64 选项就可解码,解码后会消除乱码。
(3)、BINHEX编码
这种编码方式大体格式为:
(This file must be converted with Binhex4.0)ss
Tqq6vdCx
F6p9qoz6XOIE…….
解码办法:用EMAIL软件对它解码;也可在EMAIL软件中保存乱码邮件,存为后缀为“.HQX”格式的文件,然后用WINZIP解码展开。解码后会消除乱码。
(4)、UTIF-7/UTIF-8编码
它们是UNICODE的两种转换码。
(5)、Uuencode编码
这是UNIX环境下使用的编码方式,目前已经很少用,大体格式为:
begin 644 kk.zip M1G)O;2!I;&EN+F)B3T!C(VEE+FYC='4N961U+G1W(%=E9"!.;W8@(#8@,3(ZM,SDZ,C4@,3DY-@I296-E:79E9#H@9G)O;2!F;&%B;6%I;"YF;&%B+F9U:FET.................。
end
特征:乱码前面含有"begin xxx",后面是编码前的原始文件名(如kk.zip);接着是已经过编码的信件内容(如上述的乱码部分);最后一行为"end"
解码办法:可用BECKY!EUDORA等EMAIL软件,选择编码中相应的选项就可解码;也可以在EMAIL软件中保存乱码邮件,存为后缀为“.UUE”格式的文件,然后用WINZIP解码展开,解码后就会消除乱码。 七、发信方如何避免产生乱码邮件?
为了避免别人收到乱码,发信方应该采取以下的措施:
1、设定默认自动为7位编码
在邮件客户端软件中的书写(撰写)选项中,设定默认自动为7位编码。因为当你发送 8位格式的文本文件时,必须事先进行编码,将文件转换为7位ASCII码或更少位数的格式,然后才能保证文件的正确传送。收件人收到7位或更少位格式的邮件之后,可以再转换为8位的格式,这样就可以阅读了。
2、发送前在签字栏中注明使用的汉字编码
发送中文邮件前,最好在固定的签字栏中注明自己所使用的汉字码标准(例如GB2312、中文HZ、GBK等);港澳台及东南亚地区邮件作者在使用BIG5 码撰写完邮件、向内地发送前,要转换成上述三种简体国标码中的一种形式、并在签字栏中注明。如不转换则可能无法阅读,因为国内用户使用的邮件系统有很多不支持BIG5码。
3、正确设置EMAIL软件
选择优秀的Email收发软件可以有效地解决邮件乱码。如果使用Outlook 2003/XP,应在软件中把“简体中文(GB2312)作为默认的邮件使用语言,选择“国际设置”/为接收的所有邮件使用默认的编码。
如果使用英文EMAIL软件,应设置成:文字设定DEFAULT CHARSET:ISO 8859-1(LATIN1);编码方式ENCODING:QUOTED-PRINTABLE,不可选择7位(因为7位不支持中文);字码页CODE PAGE(可选):936或HZ-GB-2312,以支持整字识别;邮件格式:MIME;字体:宋体
如果使用其他中文EMAIL软件,应设置成:文字设定DEFAULT CHARSET:简体中文GB2312;编码方式ENCODING:QUOTED-PRINTABLE;邮件格式:MIME;字体:宋体
4、发送重要信息时先发测试信
发送重要信息时,为了确认是否无须编码即可发送正文,应该先发送测试信。而且还应确定收件人能否对附件文件进行解码。如果发送已经编码的邮件,则最好添加足够的“信头”信息,以便收件人知道所需的解码方法。建议对uuencode/UUDeview编码方式用uuencoding作信头,对mpack编码方式用base64 encoding作信头。
如果发/收件人之间远隔万里,则传送过程中,第八位将可能被截掉。这时最好先在正文中用中文给收件人发一封测试信,并了解对方能否正确收到邮件正文。如果第八位被截掉,则收件人将会看到一些乱码,而不是上述的uu/b64/Qp等格式,而且这种信件几乎不可恢复。
对策:在Netscape、Eudora或Pegasus Mail等你所使用的邮件系统中,选择其首选项或选项配置中的"Quoted Printalbe"或"MIME encoding
5、尽量利用“附件”功能发送文件
几乎所有的邮件软件,如Netscape、The Bat!、 Becky! 等邮件系统附加这类非标准 ASCII码格式的文件时,附加文件通常可以自动进行“base64”方式编码(仅对附件部分进行编码)。在用"附件"方式发送邮件之前,无需进行编码;否则适得其反。因为邮件软件能够自动成功解码这类“附加”文件,因此在发送中文类邮件时应该首选这种方法。
如果无法以附件方式发送文件,则必须在正文中发送中文或二进制文件
八、收信方如何避免邮件显示乱码?
收信方应该首先查找邮件的签字栏或正文中,有无指明对方使用的汉字编码类别;然后在Outlook XP“视图”菜单下选中“编码”,随后将出现全部的汉字编码,在其中选择邮件所指明的一种。
如果收到的邮件中没有指明所用的汉字编码,则可以顺序单击选择编码,直到邮件正文显示正确为止。如果你使用的是Netscape,则可在 Option菜单下的Document Encode中选择相应的项目。
九、在跨语种操作系统间收发电子邮件,如何保证不会乱码?
如果对方使用非中文系统,你给他发中文邮件时,他打开你发的中文邮件,就会出现乱码。解决办法有两种:
1、用绘图软件书写中文邮件
用画笔等绘图软件书写中文邮件,然后把中文邮件以GIF图形格式保存,最后压缩之、作为邮件附件发送。
运行绘图软件,在图片中输入文字,用GIF格式保存,将属性置为黑白模式(以减少图片体积),然后用WINZIP把它压缩成ZIP格式,作为附件在邮件中发送,这样不管对方在何语言平台下,都不会出现乱码,收信人不必去下载PDF文件阅读器,阅读起来也很方便。
2、使用专门的工具转换和阅读
EMAIL AID之类的工具可以把中文邮件转换为AID格式文件,你把该格式文件发给对方,他再用EMAIL AID打开观看即可。
EMAIL AID(UCWIN GOLD 1.0附带的)可以把文本文件转换为AID格式文件,大小只比原TXT文件增加几K。写好中文邮件后,用文本格式存盘,然后你运行EMAIL AID,以AID格式保存,最后你把AID文件连同EMAIL AID软件一起作为附件插在信中。对方收到信后,只需运行EMAIL AID,打开AID格式文件即可看到汉字,不管对方在何种语言平台下,都不会出现乱码。
⑶ 如何过滤特殊字符和乱码的字符
这是编码引起的,把数据库表的那个字段编码改成utf-8格式
alter
table
user(表名)
CHANGE
old(老字段)
new(新字段)
varchar(100)
charset
utf8
后面的内语句的编码就是utf8,不要改成容utf-8,MySQL不识别,不用改字段名称就直接都写原来的字段名。
⑷ 如何解决用户提交请求数据的乱码问题
•在最近的项目中 使用了jsp+servlet来开发项目,但是由于后台的不太熟练 导致了困难重重。所幸 学习能力还可以 一边做一遍学吧。 •今天的问题:请求转发后页面的乱码问题 •由于特殊原因——图片上传的form表单无法通过ajax提交 因此必须使用form表单直接提交。但是这样会导致一个问题:前后台交互的时候效果不好。为什么效果不好?这里说的不是功能的问题。作为web开发者,客户的体验我们要放在第一位。因此,我们必须将对客户的信息反馈放在一个比较重要的地位。说白了,就是上传个图片成没成功?我发布的信息是否成功的上传了?如果你上传东西的时候网页没反应,或者直接就跳转到其他页面,他会以为可以了,但是实际上没有上传到服务器上,原因可能很多,比如说是我现在的网络不好,或者文件太大了,或者是你的文件不支持,但是这作为不懂代码的用户来说是很难理解的,他们会认为你的网站做的实在是太垃圾了。 •因此,我们才会费尽心思的去为客户去思考,把他们想知道的信息传达给他们。 •理所当然,ajax很实用,但是在文件流的情况下是无法通过ajax上传数据的。 •于是 request.getRequestDispacher('url').forward请求转发和重定向派上了用场。而重定向是无法共享数据的,因此只能使用请求转发。 •在此,文件为uploadServlet和user.jsp页面。当上传购物的信息时候,我所有信息已经插入到后台,需要为用户返回信息说,你成功了。那么传统的方式,request.setAttribute()很实用,在jsp页面上用request获取值判断是否成功就可以了。 •但是 转发回来之后 页面乱码了。。。 •经多方查找资料,终于找到解决方案; •过滤器 配置成过滤所有的文件。 •现粘贴如下: package com.java.Filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EncodingFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } •web.xml配置: <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.java.Filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 以上这篇请求转发jsp页面乱码问题的快速解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
⑸ java 字符串中乱码过滤
new String(str.getBytes(),"GBK");
用这方法,把乱码正确显示。当然编码要自己设
⑹ SQL SERVER 2008中输入汉字乱码,加了过滤器也不管用
用命令语句添加不会出现,但是在页面添加就不行
说明数据库里表的编码是正常的,写入数据的时候出错
那就两种可能
1、检查页面控件给后台传值的时候是不是自动转码了。
2、后台接收数据的变量的格式是不是UTF-8。
⑺ struts2中如何用过滤器处理中文乱码
<!-- 乱码过滤器 -->
<filter>
<filter-name>CharaterencodeFilter</filter-name>
<filter-class>com.CharaterEncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharaterencodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
放在web.xml里
相应的类也给你
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
public class CharaterEncodeFilter implements Filter {
private FilterConfig config = null;
public void destroy() {
this.config = config;
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
public void init(FilterConfig arg0) throws ServletException {
config = null;
}
}
⑻ jsp编码UTF-8,action编码GBK,jsp页面参数经过几次转向(jsp-action-jsp-action-jsp)乱码问题怎样解决
添加一个过滤器 .将输入输出都设为utf-8 试试
public class Filter implements javax.servlet.Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain cha) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
cha.doFilter(req, res);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
<filter>
<filter-name>filter</filter-name>
<filter-class>com.util.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
⑼ 如何配置Filter过滤器处理JSP中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk。虽然两种都可以出来中文乱码,但是却造成了处理乱码的格式不一致。所以编译出错。
解决方法:所有地方都用utf-8或gbk
//过滤器类
CharactorFilter.jsp
package cn.com.Filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharactorFilter implements Filter { //继承Filter类
//字符编码
String encoding=null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null){
//设置request字符编码
request.setCharacterEncoding(encoding);
//设置response字符编码
response.setContentType("text/html;charset="+encoding);
}
//传递给下一个过滤器
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
//获取初始化参数
encoding=filterConfig.getInitParameter("encoding");
}
public void destroy() {
// TODO Auto-generated method stub
encoding=null;
}
}
web.xml
<filter> <!--注意这里是filter,不要配置成servlet-->
<filter-name>CharactorFilter</filter-name> <!--过滤器名称-->
<filter-class>cn.com.Filter.CharactorFilter</filter-class> <!--过滤器的完整类名-->
<init-param> <!--初始化参数-->
<param-name>encoding</param-name> <!--参数名称-->
<param-value>utf-8</param-value> <!--参数值-->
</init-param>
</filter>
<filter-mapping> <!--过滤器映射-->
<filter-name>CharactorFilter</filter-name><!--过滤器名称-->
<url-pattern>/*</url-pattern><!--URL映射,给所有页面处理乱码-->
</filter-mapping>