专题1:Java乱码解决方案_第1页
专题1:Java乱码解决方案_第2页
专题1:Java乱码解决方案_第3页
专题1:Java乱码解决方案_第4页
专题1:Java乱码解决方案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专题1:Java乱码解决方案第一页,共23页。乱码的出处开发者所用的操作系统jdk的名称、版本数据库的名称、版本(精确版本)以及jdbc驱动的版本出现乱码的源代码第二页,共23页。字符集ASCII:是一个原始的字符集,而且是到目前为止最通用的,是所有字符集必须支持的最主要部分。基本上只定义了书写英语需要的全部字符,这些字符的编码是0~127。Unicode字符集:是一个双字节字符集,能表示多种文字和几百种语言中的40,000多个不同字符。ISO字符集:国际标准组织(ISO)定义了几个不同的字符集,是在ASCII码基础上增加了其他语言和地区需要的字符。其中最突出的是ISO8859-1(Latin-1),Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,其中0~127的字符与ASCII码相同。

UTF-8:是一个压缩的Unicode版本,使用单个字节表示最常用的字符,即0到127的ASCII字符,较少见的字符使用三个字节表示,如汉字。GB2312:中国国家标准的简体中文字符集,所收录的汉字已经覆盖99.75%的使用频率,基本满足了汉字的计算机处理需要,在中国大陆和新加坡获广泛使用。(GB18030,GBK,BIG5)第三页,共23页。常用字符集字符集名称语言/国家US-ASCII英语UTF-8压缩UnicodeUTF-16压缩UCSISO-10646-UCS-2原始UnicodeISO-10646-UCS-4原始UCSISO-8859-1Latin-1,西欧ISO-8859-2Latin-2,东欧ISO-8859-3Latin-3,南欧ISO-8859-4Latin-4,北欧ISO-8859-5ASCII码加古斯拉夫语ISO-8859-6ASCII码加阿拉伯语ISO-8859-7ASCII码加希腊语ISO-8859-8ASCII码加希伯来语第四页,共23页。ISO-8859-9Latin-5,土耳其语ISO-8859-10Latin-6,ASCII码加北欧语ISO-8859-11ASCII码加泰国语ISO-8859-13Latin-7,ASCII码加波罗地海周边语言和独特的拉托维亚语ISO-8859-14Latin-8,ASCII码加盖尔语和威尔式语ISO-8859-15Latin-9,Latin-0,西欧ISO-2022-JP日语Shift_JIS日文版WindowsEUC-JP日文版UnixBig5中国台湾地区,汉语GB2312中国大陆,汉语KOI6-R俄罗斯ISO-2022-KR韩语EUC-KR韩语版UnixISO-2022-CN汉语第五页,共23页。主要工具使用的字符集(默认)操作系统(Windows):GB2312服务器(Tomcat):ISO-8859浏览器(IE):GB2312数据库(Mysql):latin1(ISO-8859-1)开发工具(Eclipse):latin1(ISO-8859-1)第六页,共23页。编码的穷举法System.out.println(newString(testString.getBytes(”ISO-8859-1〃),”gb2312〃));System.out.println(newString(testString.getBytes(”UTF8〃),”gb2312〃));System.out.println(newString(testString.getBytes(”GB2312〃),”gb2312〃));System.out.println(newString(testString.getBytes(”GBK”),”gb2312〃));System.out.println(newString(testString.getBytes(”BIG5〃),”gb2312〃));

第七页,共23页。<%@pagecontentType=〃text/html;charset=GB2312〃%>:jsp被编译成为html的过程中提供编码方式让java来“读取”表达式当中的字符串。<metahttp-equiv=〃Content-Type〃content=〃text/html;charset=gb2312〃>:为IE浏览器提供编码选择,是用来”显示”最后的数据。第八页,共23页。1.编码语句:

<%@pagelanguage=“java”pageEncoding=“UTF-8”%>

<%@pagecontentType=“text/html;charset=iso8859-1”%>

<html>

<head>

<title>中文问题</title>

<metahttp-equiv=“Content-Type”content=“text/html;charset=UTF-8”>

</head>

</head>

<body>

看看是否出现了乱码!

</body>

</html>

第九页,共23页。分析:第一个地方的编码格式为jsp文件的存储格式。Eclipse等会根据这个编码格式保存文件,并编译jsp文件括里面的汉字。第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样如有中文肯定出乱码,也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,“我是个好人”也会出现乱码。必须一致才可以。第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。第十页,共23页。2.表单使用Post方式提交后接收到的乱码问题

这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受,导致乱码。第十一页,共23页。解决方法AStringstr=newString(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")第十二页,共23页。解决方法B在请求页面上开始处,执行请求的编码代码:request.setCharacterEncoding("UTF-8")第十三页,共23页。3.表单get提交方式的乱码处理方式如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码。第十四页,共23页。解决方法A同上,对接收到的字符进行解码,再转码第十五页,共23页。解决方法BGet走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在

server.xml的Connector节点增加useBodyEncodingForURI="true"属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为utf-8,接受页面正常接受就可以了。

第十六页,共23页。4.上传文件时的乱码解决上传文件时,form表单设置的都是enctype=“multipart/form-data”。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象。这是因为apach的先期commons-有bug,取出汉字后进行解码,因为这种方式提交,编码又自动使用的是tomcat缺省编码格式iso-8859-1。出现的乱码问题是:句号,逗号等特殊符号变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。第十七页,共23页。解决方法下载commons-,这个版本的jar已经解决了这些bug。

但是取出内容时仍然需要对取出的字符进行从iso8859-1到utf-8转码,就能得到正常的所有汉字以及字符。第十八页,共23页。5.java关于url请求,接受参数的乱码url的编码格式,取决于上面所说的URIEncoding=”UTF-8”。如果设定了这个编码格式,则意味着所有到url的汉字参数,都必须进行编码才可以,否则得到的汉字参数值都是乱码,例如:

Response.sendDirect(“/a.jsp?name=张大维”);而在a.jsp里面直接使用Stringname;得到的就是乱码。因为规定了必须是utf-8才可以,所以,这个转向应该这样写:

Response.sendDerect(“/a.jsp?name=URLEncode.encode(“张大维”,”utf-8”)第十九页,共23页。6.脚本代码关于url请求,接受到的参数乱码脚本中也会进行页面转向的控制,也会涉及到附带参数,并在接受页面解析这个参数的情况。如果这个汉字参数不进行URIEncoding=”UTF-8”所指定的编码处理,则接受页面接受到的汉字也是乱码。脚本处理编码比较麻烦,必须有相应的编码脚本对应文件,然后调用脚本中的方法对汉字进行编码即可。第二十页,共23页。7.关于jsp在Eclipse等中打开的乱码问题对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使用的编码格式都是iso8859-1。所以导致jsp里面的汉字出现乱码。这个乱码比较容易解决,直接到eclipse3.1的偏好设置里面找到general->edidor,设置为您的文件打开

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论