Java应用中文乱码问题.ppt
专题:Java应用中文乱码问题,(一)JSP应用中文乱码问题(Tomcat环境):1、乱码的由来;2、request对象与字符编码;3、response对象与字符解码;4、JSP中构造的String与字符编码;5、Console中的字符编码;6、其他应用中的字符编码;,JSP应用中文乱码问题,1、乱码的由来,(1)日常字符如何被计算机“认识”并处理?利用特定的字符集charset将字符转换为对应的二进制编码(字节)在计算机系统中存储、传输、运算等。在显示字符时应该使用同一字符集将二进制编码进行解码。如果显示汉字时使用的解码字符集和原编码字符集不一致则会出现乱码。,字符,1001 1011,编码,解码(显示),1、乱码的由来,(2)常用的编码字符集:美国 ASCII;欧洲 ISO88591;中国 GB2312、GBK;国际 Unicode;,字符,1001 1011,编码,解码(显示),表单客户端,response,request,Tomcat(JSP容器),web服务器,*.jsp,request,2、request对象与字符编码,如果没有指定request的编码方式,那么从客户端接受到的参数的名字和参数值都是以ISO-8859-1编码的String。,默认编码 ISO-8859-1,2、request对象与字符编码,request对象的方法:public String getParameter(String name)获取客户端表单传来的参数值,参数为表单控件的name属性值,如果name不存在,则返回null。,(1)表单输入页面,(2)信息读取页面,姓名:性别:男女,(1)表单输入页面,解决方法一,改变request的charset,提取参数值之前使用一次,page指令的charset设置不可错,解决方法二,演示运行ex12_,原charset,不可写错,新charset,将变量值的charset从旧变为新,客户端,response,request,Tomcat(JSP容器),web服务器,*.jsp,response,3、response响应对象与字符解码,页面page指令的charset指定了response的编码字符集。如果沒有指定字符集的话,就默认使用ISO-8859-1。它控制输出时的编(解)码字符集!,charset解码,3、response对象与字符解码,字符,1001 1011,request编码,response解码字符集由page指令的charset设置,charset指定了显示时的字符集,页面page指令的charset指定了response使用的字符集。如果沒有指定字符集的话,就默认使用ISO-8859-1。response(page指令)控制输出显示时的字符集!如果字符的字符集和response(page指令)的字符集不一样,就会显示乱码。,3、response对象与字符解码,3、response对象与字符解码 范例分析,有乱码吗?,分析,3、response对象与字符解码 范例分析,分析:page的charset是?变量的字符集是?判断:是否相同?,演示运行ex12_request,在jsp中构造的String以及页面本身的String,如果没有明确指定String的构造字符集,String使用的字符集就是charset指定的;如果charset没有指定字符集的话,那么就是用ISO-8859-1。这两种String区别于从request和数据库中获取的字符。,4、JSP中构造的String与字符编码,改变charset和构造字符集,对比JSP构造字符的客户端显示,4、JSP中构造的String与字符编码,页面本身的字符,页面构造的字符,改变charset和构造字符集,对比JSP构造字符的客户端显示,4、JSP中构造的String与字符编码,有乱码吗?,分析,改变charset和构造字符集,对比JSP构造字符的客户端显示,4、JSP中构造的String与字符编码,演示运行ex13,分析:page的charset是?变量的字符集是?判断:是否相同?,Console(cmd界面、Tomcat日志文件)使用操作系统OS的默认字符集,中文系统是GB2312。这些界面自身的字符和构造字符都是用OS默认编码字符集,显示字符时也用默认字符集。,5、Console中的字符编码,5、Console中的字符编码范例分析,有乱码吗?,分析,5、Console中的字符编码范例分析,演示运行ex13_,分析:显示用的charset是?变量的字符集是?判断:是否相同?,(1)Java和Servlet文件中构造的String使用操作系统的默认编码,中文系统是gb2312。(2)数据库存取不改变原有的编码形式,统一在存入时编码String为gb2312。,6、其他应用中的字符编码,(1)原则:判断某字符是否会显示乱码,要分析该字符的编码字符集和显示时使用的解码字符集是否一致?(2)编码:request对象中取出的参数值为ISO-8859-1编码字符集,可以改变;(3)编码:JSP页面自身的字符和构造的字符所使用的编码字符集有page的charset指令,否则为默认值;(4)编码:数据库中取出的字符为存入时的编码字符集;(5)编码:Java和Servlet中的字符集为OS的字符集,一般为GB2312;(6)显示(解码):浏览器中显示时由page的charset制定显示用的字符集。Console中显示时用OS的默认字符集。,小 结,