简介:在实际开发过程中,我们经常遇到中文显示乱码问题,为了解决这个问题,我们必须追根问底,我们来认识一下目前有几种字符编码方式:
1)ASCII编码,ISO-8859-1 它是单字节编码,是目前计算机中应用最广泛的字符编码方式;
2)Unicode编码,一个字符用两个字节表示,比如UTF8就是采用Unicode编码方式
3)GB2312 字集是简体字集,BIG5 字集是台湾繁体字集,GBK 字集是简繁字集:包括GB字集、BIG5字集和一些符号;
4)GB1830 是国家制定的一个强制性大字集标准。
目前Linux 系统默认使用的是ISO-8859-1 编码,Win32 系统默认使用的是GB2312, 服务器与客户端通信,一次通讯会导致两次字符编码
所以如果遇到中文显示问题,一般是服务端与客户端编码不一致导致的。
如果服务端是采用UTF8编码方式,客户端要处理中文的话,就可以采用如下代码了:
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
byte bytearray[] = new byte[1024];
int current = -1;
int i= 0;
while((current == bis.read()) != -1)
{
bytearray[i++] = (byte)current;
}
resultData = new String(bytearray,"GB2312") ;
很多时候,服务端在传输过程中采用ISO-8859-1字符集,这样就是直接采用ASCII编码方式,客户端需要将数据反转才能使用,可参考如下代码:
public static String FormatStr(String str)
{
if(str == null || str.length() == 0)
{
return "";
}
try{
return new String(str.getBytes("ISO-8859-1"),"gbk"));
}catch(UnsupportedEncodingException ex)
{
return str;
}
}