在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
数据库中文乱码
有时候会出现后台为中文,但数据持久化时出现中文乱码,通常这有一下几种可能:
数据库、表、字段列的编码为非中文编码,表现为直接操作数据库也没有办法写入中文,这就需要修改数据库、表、字段列的编码。
jdbc链接数据库时没有使用中文编码,这时需要在jdbc链接URL后增加useUnicode=true&characterEncoding=UTF-8,这里需要注意,如果是xml中配置,&需要转义为&,properties中直接使用&。