在Java编程中,经常会碰到汉字的处理及显示问题,以不小心就会产生一大堆乱码或者问号。造成这种问题的根本原因是Java中默认的编码方式是Unicode,而中国人通常使用的文件和DB都是基于GB2312或BIG5等编码,故会出现此问题。

对于不同的问题,不同的JDK版本,不同的应用服务器(如Tomcat,Jboss,Weblogic),处理方法都会有一些微小的差异。在这里,主要针对Tomcat中JSP开发容易出现的中文乱码问题进行讨论,一般有以下几种情况:

1.JSP中输出中文的乱码问题

所谓在JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等,这种情况下的乱码问题往往是因为没有给JSP页面制定显示字符的编码方式,解决问题如下:

·在JSP页面头部加上语句(在Servlet页面中使用httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式:

String str="中文";

byte[] tmpbyte=str.getBtyes("ISO-8859-1");

str=new String(tmpbyte);

out.print(str);

%>

2.获取表单提交的数据时的中文乱码问题

在没有加任何其他处理之前,用request.getParameter(panamName)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会出现乱码。出现这种问题的原因是Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。

比如,建立一个test.jsp,内容为:

String str=request.getParameter("chStr");

if(str==null) str="没有输入值";

%>

中文Test

请输入中文:

运行过后,在输入框中输入汉字“中文”,提交过后再显示出来后就变成了一堆乱码。解决此问题的办法有两个。一是不修改其他设置,只是在将表单中的中文数据取出来过后再转换编码,方法如语句String str=request.getParameter("chStr");String str=new String(sre.getByte("ISO-8859-1"),"gbk"),但这种方法只是从一个局部来考虑问题,如果这样的地方太多,就不得不将这条语句重复写很多次,在 比较大的项目中,这是一种不太可行的方案。另一个方法就是让对所有页面的请求都通过一个Filter,将处理字符集设置为gbk。具体的做法如下(在Tomcat的webapps/servlet-examples目录有一个完整的例子,也可以参考其中web.xml和SetCharacter EncodingFilter的配置):

首先将%TOMCAT%/webapps/servlets-examples/Web-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.class拷贝到自己应用的/Web-INF/classes/com/util/filter目录下;然后再在web.xml文件的后面加上如下配置代码:

Set Character Encoding

com.ccut.struts.SetCharacterEncodingFilter

encoding

gbk

Set Character Encoding

/*

3.URL中的中文问题

对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。

例如,建立test2.jsp文件,内容为:

String str=request.getParameter("chStr");

if(str==null) str="没有输入值";

%>

中文Test

点击这里提交中文参数

运行后,可见通过URL传递的中文参数取出来过后变成了乱码,造成这种结果的原因是Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式。

解决这个问题的方法是打开Tomcat安装目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="gbk",添加过后完整的Connector块代码如下:

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000"

disableUploadTimeout="true"

URIEncoding="gbk"

/>

4.数据库访问时的乱码问题

在建立数据库时,将数据库中的所有表的编码方式都设置为gbk,原因是JSP中也使用了gbk编码,这样统一的结果是可以减少很多不必要的编码转换问题。另外,在使用JDBC连接MySQL数据库时,连接 字符串写成如下形式可以避免一些中文问题:

jdbc://mysql://hostname:port/DBname?user=username&

password=pwd&

useUnicode=True&

characterEncoding=gbk

如果是以数据源的方式连接数据库,在配置文件中使用:

url

jdbc://mysql://hostname:port/DBname?&useUnicode=True&characterEncoding=gbk

但是,如果使用一个已经存在的数据库,数据库的编码方式是ISO-8859-1,而Web应用中使用UTF-8,且数据库中已经有很多重要信息,因此不能通过更改数据库的编码方式来解决问题。这个时候,在往数据库中写数据库时,一定要在JDBC连接字符串中加入“useUnicode=True&characterEncoding=ISO-8859-1”,这样可以顺利的往数据库中写入正常的数据。但是,在将数据读出数据库时,乱码又会出现,这个时候就应该在数据取出时对其转码,可以将转码功能写为一个函数,具体实现如下:

public String charConvert(String src){

String result=null;

if(src!=null){

try{

result=new String(src.getBytes("ISO=8859-1"),"gbk");

}catch(Exception e)

{

result=null;

}

}

return result;

}       于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了

java string 截取中文乱码_Java如何处理中文乱码问题相关推荐

  1. java String截取字符之前,之后的字符串。获取每个字符所在位置。

    java String截取字符之前,之后的字符串.获取每个字符所在位置 //获取每个逗号之前,之后的每个字符 public class Stringindexof { public static vo ...

  2. java exception 乱码_java 常见中文乱码问题解决

    关于中文乱码: 一. 1).在jsp页面上输入中文,要保证中文不乱码,有三个前提: 保证contentType="text/html:charset=UTF-8",pageEnco ...

  3. java printstream 中文乱码_JAVA的中文字符乱码问题

    JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后, 经过极为辛苦的调试和搜索资料后终于解决,满以为自己已经 ...

  4. java string 截取_java string 怎样截取前n个字符?的解决方案列表

    展开全部 java string 怎样截取前n个字符一般有两种方法: 方法一:使用如下代码: s=32313133353236313431303231363533e78988e69d833133336 ...

  5. java button中文乱码_java解决中文乱码的几种写法

    工作中总会遇到中文乱码问题,以导出文件,文件名称是中文的话,下载下来的文件名称会乱码问题,总结了几种解决文件名乱码的写法,仅供参考. 首先定义一个汉语字符串 String zhName = " ...

  6. java mysql 乱码_java+mysql中文乱码解决

    MySQL默认使用 ISO-8859-1 ( 即Latin1 ) 字符集,而JAVA内部使用Unicode编码,因此在JAVA中向MYSQL数据库插入数据时,或者读取数据时,都需要先转换一下编码方式: ...

  7. java中文处理_Java的中文乱码处理

    1,设置编译器的编码(Eclipse). Window ====>preferences====>Workspace====> Text file encoding下的Other设置 ...

  8. java取字符串首字母_java 获取中文字符的首字母

    原理: GB2312编码中的中文是按照拼音排序的 注意: 一些生僻的字无法获得正确的首字母,原因是这些字都是后加入的. import java.io.UnsupportedEncodingExcept ...

  9. java 中文字体_Java的中文字体

    java中文支持(或乱码的解决):java程序是跨平台的,但需要解决中文支持问题. 方法很简单,就是在java安装目录下放进去一个中文字体即可. cd /usr/lib/jvm/java-6-sun/ ...

  10. ssh linux mysql 乱码_JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码

    JSP,mysql,tomcat下(基于struts2)中文及其乱码问题的解决 6大配置点 使用UTF-8编码 目前对遇到J2EE 开发中 中文及其乱码问题,参考网上资料做个总结, 主要是6大配置点: ...

最新文章

  1. 用Python Turtle库画一个萌化的蜘蛛侠
  2. 你敢参与,我就敢送!牛转好运来,新春大抽奖
  3. Windows Server 2008 R2 如何启动内核调试
  4. 最好最坏和平均情况下的性能分析
  5. DokuWiki 开源wiki引擎程序
  6. 「雕爷学编程」Arduino动手做(20)—水银开关模块
  7. Discuz X2 模块模板代码详解,DIY更容易!
  8. 使用GDAL将下载的Google卫星图像转为带坐标的tif
  9. docker 多容器连接 以Nginx+Php为例
  10. iOS开发人员需要了解的苹果开发者账号与邓白氏编码
  11. 视频通信系统的关键技术与挑战
  12. 读书笔记 - 《资本幕后》
  13. 请启封,您的双态IT大会邀请函
  14. Win10应用设计的那些事儿
  15. URL、域名、子域名、主机名
  16. 钉钉windows端多开软件_电脑便签需要下载吗?电脑上用什么桌面便签软件工具好...
  17. Oracle GL - 使用标准程序获取/创建CCID
  18. 读书笔记||控制论、信息论、系统论
  19. 暴雪战网客户端下载后只能连接中国设置
  20. java-php-python-ssm校园失物招领系统计算机毕业设计

热门文章

  1. 【倒计时】用JS写出京东倒计时效果
  2. 26 伪造ICMP数据包
  3. 安装spoonwep
  4. 解决extremeComponents中文按拼音排序问题
  5. weblogic部署项目后内存溢出
  6. 一、安卓系统源码下载
  7. 小小串联电阻,大大的作用
  8. 突击Mercurial SCM(HG)3---撤销操作
  9. 【蓝桥杯2015Java】奇妙的数字、打印大叉
  10. Windows 10 配置Java 环境变量