java gb2312中文乱码_Java中文乱码问题(转)

java gb2312中文乱码_Java中文乱码问题(转)大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来:Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。…

大家好,又见面了,我是你们的朋友全栈君。

大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来:

Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312或-ecoding UTF-8编译;对于JSP,在文件头加上或

基本上就能解决这类乱码问题。

下面是一些常见中文乱码问题的解决方法(下面例子中ecoding采用的是gb2312,也可设为ecoding GBK或ecoding UTF-8):

一、JSP页面乱码

这种乱码问题比较简单,一般是页面编码不一致导致的乱码,一般新手容易出现这样的问题,具体分以下两种情况:

Ø 未指定使用字符集编码

下面的显示页面(display.jsp)就出现乱码:

JSP的中文处理

这种乱码的原因是没有在页面里指定使用的字符集编码,JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:

,就可以消除乱码了。

完整页面如下:

JSP的中文处理

Ø 编码字符集设置不一致

下面的显示页面(display.jsp)就出现乱码:

JSP的中文处理

这个出现乱码原因是由于页面编码不一致导致的乱码,在这个例子中我们可以看到有三处设置字符集的地方,下面分别了解一下这三处设置具体含义:

第一处的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。

第二处编码为解码格式。因为存为gb2312的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,也会出现乱码。必须一致才可以。

第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式用不用设置都可以。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式出现了乱码。

完整解决代码如下:

JSP的中文处理

二、表单提交中文时出现乱码

下面是一个提交页面(submit.jsp),代码如下:

JSP的中文处理

下面是处理页面(process.jsp)代码:

JSP的中文处理

如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。

Ø POST提交方式

解决办法:

A、 接受参数时进行编码转换

String s=new String(request.getParameter(“name”).getBytes(“ISO-8859-1″),”gb2312”) ;

修改后的process.jsp代码如下:

JSP的中文处理

String s=new String(request.getParameter(“name”).getBytes(“ISO-8859-1″),”gb2312”) ;

out.print(s);

%>

如果使用该方法的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。

B、通过request.seCharacterEncoding (“gb2312”)对请求进行统一编码,就实现了中文的正常显示。

修改后的process.jsp代码如下:

JSP的中文处理

如果使用该方法接受此参数的页面就不必在转码了,即可得到汉字参数。但每页都需要执行这句话。

C、为了避免每页都要写request.setCharacterEncoding(“gb2312”),可以使用过滤器对所有jsp

进行编码处理。就是使用Servlet规范中的过虑器指定编码,主要代码如下:

import java.io.*;

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 SetCharacterEncodingFilter implements Filter {

protected String encoding = null;

public void destroy(){

this.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中的配置如下:

SetCharacterEncodingFilter

SetCharacterEncodingFilter

encoding

gb2312

SetCharacterEncodingFilter

/*

修改后的process.jsp代码如下:

JSP的中文处理

以上方法只对POST方式提交有效果。

Ø GET提交方式

如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码。

解决办法:

A、 使用POST提交方式解决办法的第一种方式,对接受到的字符进行解码,再转码。

B 、首先配置tomcat下server.xml的Connector节点增加useBodyEncodingForURI=”true”属性配置,然后在JSP页面中加入所设置的编码格式进行编码。

1、Tomcat中server.xml配置如下:

connectionTimeout=”20000″

redirectPort=”8443″

useBodyEncodingForURI=”true”

/>

2、修改后的process.jsp代码如下:

JSP的中文处理

三、数据库连接出现乱码

这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:  在数据库连接字符串中加入编码字符集

String Url=” jdbc:sqlserver://localhost:1433; DataBaseName=mydb;user=sa&password=sa&useUnicode=true&characterEncoding=GB2312″;

并在JSP页面中使用如下代码:

response.setContentType(“text/html;charset=gb2312”);  request.setCharacterEncoding(“gb2312”);

四、关于jsp在MyEclipse中打开的乱码问题

对于一个已经存在的项目,Jsp文件的存储格式可能是utf-8。如果新安装的eclipse,则缺省打开使用的编码格式可能iso8859-1。所以导致 jsp里面的汉字出现乱码。这个乱码鱼解决方式如下:

A、Myeclispe Window – > Preferences弹出属性窗口

General – > Workspace 设置Text file encoding 全局设置。

B、右键你的项目—属性—Text file encoding 项目设置

五、关于html页面在eclipse中打开出现乱码情况

由于大部分页面都是由dreamweaver制作,其存储格式跟eclipse的识别有差别导致。

一般这种情况,在eclipse中新建一个jsp,直接从dreamweaver复制页面内容粘贴到jsp即可。

六、JSP页面通过URL传递中文参数的乱码问题

在项目中,我们经常遇到需要在jsp页面切换中传递中文字符。例如:http://website/test1.jsp?act=add&type=苹果

Ø 一般来说我们很少直接在URL里面把参数写成中文,如例子中的”type=苹果”这样传递。如果出现这种情况,在我们的接收参数的页面我们只需要做个简单的转换就可以了。

代码test1.jsp:(主要部分)

String type = request.getParameter(“type”);

String result = new String(type.getBytes(“iso-8859-1”), “gb2312”);

out.println(result);

%>

Ø 更普遍的做法,就是对url中的中文字符进行编码,变成类似type=%20D%20B这样的字符。

代码MyJsp1.jsp:

test

代码MyJsp2.jsp:

String tempVal = URLDecoder.decode(request.getParameter(“act”));

out.println(new String(tempVal.getBytes(“ISO-8859-1”), “gb2312”));

%>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160374.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在ubuntu上安装ros_车机安装第三方app教程

    在ubuntu上安装ros_车机安装第三方app教程参考网址:链接1参考网址:链接2一、安装ROS1、添加ROS软件预源,打开命令行输入以下代码:sudosh-c’echo"debhttp://packages.ros.org/ros/ubuntu$(lsb_release-sc)main">/etc/apt/sources.list.d/ros-latest.list’1222、添加密钥,输入…

    2022年9月10日
  • JAVA简历1到三年

    JAVA简历1到三年JAVA开发工程师_3年基本资料求职意向意向职位: Java开发工程师 求职地址:北京期待薪资:面议到岗时间:随时工作性质:全职 目前状况:已离职个人技能1.熟练Java语言基础语法以及面向对象特征。2.熟练Java语言中常用API的使用,如IO,String,Collection等。3.熟练MySQL的增删改查操作以及JDBC数据库连接池的使用。4.熟悉Git这种分布式版本的控制系统的使用。5.熟悉Spring、Springmvc、M

    2022年7月7日
  • IntelliJ IDEA中的神仙插件(写代码必备)

    IntelliJ IDEA中的神仙插件(写代码必备)俗话说:"工欲善其事必先利其器",今天准备和大家一起分享一下实际工作中能提升幸福感和工作效率的IDEA插件。

    2022年5月29日
  • soapUI使用教程[通俗易懂]

    soapUI使用教程[通俗易懂]SoapUI使用1.什么是soapUI由于Web服务是被程序调用的,一般不会提供界面让最终用户或测试人员直接使用,soapUI是针对这种情况开发的一个工具,用户可以在soapUI中通过简单的操作完成复杂的测试。目前我们系统中电子渠道接口、充值卡接口都是用WebService实现的,因此需要用到SoapUI进行测试。SoapUI不仅可以简单地执行测试,而且可以自动运行已经准备

    2022年6月15日
  • mysql创建数据库的步骤_sql创建数据库代码

    mysql创建数据库的步骤_sql创建数据库代码作者介绍:陈东明,饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架构研发工作。曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构建和基础架构的研发经验,善于复杂业务需求下的大并发、分布式系统设计和持续优化。个人微信公众号dongming_cdm。Tedis(https://github.com/eleme/tedis)是基于开源TiKV…

    2022年9月16日
  • 解决WinHTTP Web Proxy Auto-Discovery Service无法启动问题

    解决WinHTTP Web Proxy Auto-Discovery Service无法启动问题需要启动该服务的起因是需要抓包,所以下载了charles,但无任何抓包信息,也没有错误提示,未查到原因。遂又下载了fiddler,此时启动会提示“FailedtoregisterFiddlersasthesystemproxy”,上网查原因是WinHTTPWebProxyAuto-DiscoveryService该服务没有启动,到服务中查询确实如此。解决方案(此为对我生效的解决方案,关联服务未启动等其他问题导致也是有可能的):win+Rregedit打开注册表,找到\HK

    2022年6月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号