Apusic下中文乱码处理

Apusic下中文乱码处理

中文乱码的问题要根据实际情况,进行具体分析,一般的分析思路如下:

首先要说明的是,Apusic的WebService组件中的URIEncoding只支持url中直接写死中文的情况,不支持以变量的方式将中文拼进url中的场景。

其次需要说明的是,请检查应用系统中是否已经内置或者配置了Filter的转码处理功能,该功能是否会影响当前场景中的中文乱码。

(1)、如果是页面级别的url传输中文,建议通过js的函数escape()或者encodeURI()进行一次或者两次编码,escape()用于对url中的写死中文或者变量方值的中文进行编码,而encodeURI()用于对整个uri进行编码。

(2)、jsp页面存储编码格式需要注意,如果页面内部指定了字符集为GBK或者gb2312,则文件的存储编码格式应该是:ANSI或者default,如果页面内部指定了字符集是utf-8,则文件的存储编码格式应该是:utf-8,如下:

<%@ page language="java" contentType="text/html; charset=GBK"   pageEncoding="GBK"%>

contentType和pageEncoding可以取其一,如果两者都写,需要保持一致!

注意:如下:

<meta http-equiv = "content-type" content = "text/html; charset=GBK" />

会影响静态页面,如html或者htm中的写死中文,jsp中一般有<%@ page>的页签就ok了。

(3)、如果含中文的url是在后台代码中编写的话,则可以考虑通过java的方法进行url的编码和解码,如下:

java.net.URLEncode.encode(“yourChineseName”,”UTF-8”) java.net.URLDecode.decode(“yourChineseName”,”UTF-8”)

(4)、如果非要进行中文的转码,可以通过以下方式进行遍历处理:

String strFileNullTip = "测试中文乱码!";
String strTest1=new String(strFileNullTip.getBytes("iso-8859-1"),"GBK");
String strTest2=new String(strFileNullTip.getBytes("GBK"),"utf-8");
String strTest3=new String(strFileNullTip.getBytes("utf-8"),"GBK");
String strTest4=new String(strFileNullTip.getBytes("utf-8"),"iso-8859-1");
String strTest5=new String(strFileNullTip.getBytes("iso-8859-1"),"utf-8");
String strTest6=new String(strFileNullTip.getBytes("GBK"),"iso-8859-1");

out.println("=strTest1 is:="+strTest1+"=end=");
out.println("=strTest2 is:="+strTest2+"=end=");
out.println("=strTest3 is:="+strTest3+"=end=");
out.println("=strTest4 is:="+strTest4+"=end=");
out.println("=strTest5 is:="+strTest5+"=end=");
out.println("=strTest6 is:="+strTest6+"=end=");

(5)、中文奇数乱偶数不乱现象:

在第(4)步中的转码中,如果是GBK和UTF-8之间相互转码,会造成中文奇数乱,偶数不乱的现象,因为GBK是两个字节表示一个中文,而UTF-8则是三个字节表一个中文,它们固有的性质决定了,GBK和UTF-8之间不能直接相互转码,如果要转可以通过以下方式之一:

Ø  通过java.net.URLEncode.encode压码,再decode解码;

Ø  使用统一的字符集,要么GBK,要么UTF-8;

Ø  使用国际化的标准字符集:ISO-8859-1,因为:ISO-8859-1到GBK,或者ISO-8859-1到UTF-8转码时,中文奇偶数都不会出现乱码;

你可能感兴趣的:(java,chinese,apusic)