在JSP中从前台跳转到后台后,有可能出现中文乱码,对中文乱码的处理根据提交方式有所差异。

    Post提交:直接使用

request.setCharacterEncoding("utf-8");

即可;

    Get提交:由于请求参数是通过附加在URL上传递的,所以处理Post提交数据的方法不适用与此。对于Get请求下提交的数据,需要使用

String str=request.getQueryString();String strQuery=java.net.URLDecoder.decode(str,"utf-8");

进行转换,但取出的数据需要使用字符串的分割对数据进行重新整理。

    后来发现一种同时适用于Post、Get提交的方法

String str=request.getParameter("name");byte[] bytes=str.getBytes("ISO-8859-1");String strQuery=new String(bytes,"utf-8");

但是这种方法需要对每个参数都进行处理

有时在tomcat中会出现中文乱码,但是使用jetty时不会出现,需要在tomcat中设置URIEncoding='utf-8'

PS:补记于2016.9.30

    还有一种中文乱码的情况,出现的乱码统一为“口口”,这种情况的乱码是jdk或liunx中没有中文字体,对应的解决访问如下:

//在jdk中增加中文字体

jdk默认没有中文字体,所以需要手动设置

cd $JAVA_HOME/jre/lib/fonts

mkdir fallback

cd fallback

将需要的.ttf文件考入,例如宋体 simsun.ttc

mkfontscale

mkfontdir

//在liunx中增加中文字体

cd /usr/share/fonts

mkdir winfont

chmod 664 winfont

cd winfont

将需要的.ttf文件考入,例如宋体 simsun.ttc

mkfontscale

mkfontdir

fc-cache -fv

PS:补记于2016.10.10

    数据库中文乱码

有时候会出现后台为中文,但数据持久化时出现中文乱码,通常这有一下几种可能:

  1. 数据库、表、字段列的编码为非中文编码,表现为直接操作数据库也没有办法写入中文,这就需要修改数据库、表、字段列的编码。

  2. jdbc链接数据库时没有使用中文编码,这时需要在jdbc链接URL后增加useUnicode=true&characterEncoding=UTF-8,这里需要注意,如果是xml中配置,&需要转义为&,properties中直接使用&。