C++ 代码

多种手机平台开发-----让我们跟苹果一起红起来。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

网络通信的中文乱码问题

Posted on 2012-03-30 16:49  蔡清华  阅读(467)  评论(0编辑  收藏  举报

简介:在实际开发过程中,我们经常遇到中文显示乱码问题,为了解决这个问题,我们必须追根问底,我们来认识一下目前有几种字符编码方式:

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; 

             } 

    }