博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络传输乱码问题
阅读量:7239 次
发布时间:2019-06-29

本文共 1762 字,大约阅读时间需要 5 分钟。

解决方案之------网络传输中文编码问题

 
(2011-09-25 22:24:42)
标签: 

 

1.要解决中文乱码问题,首先得了解什么是字符编码

   计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码。要制定字符编码首先要确定字符集,并将

   字符集内的字符排序,然后和二进制数字对应起来,根据字符集内字符的多少,确定几个字节来编码。

2.常用的字符编码

   ASCII 编码是目前计算机中常用的最广泛地 字符集及其编码。ISO-8859-1可以表示的是西欧语言,看起来很单一,但是由于是单字节编码,与计算机最基础的表示单位一致,所以在很多时候,仍旧 使用ISO-8859-1编码来表示,而且在很多协议上默认使用这种编码。Unicode编码(统一码),通常所说的UTF-8就是Unicode编码的 实现方式。GB2312字集是简体字集;BIG5字集是台湾繁体字集;GBK字集是简繁字集;GB18030 是国家制定的一个强制性大字集标准;Linux系统默认的使用的是ISO-8859-1编码,。现在的PC平台必须支持GB18030,对嵌入式产品暂不 作要求。所以手机、MP3一般只支持GB2312。

3.网络传输产生中文乱码原因

   网络通信中,产生乱码的原因主要是通信过程中使用了不同的编码方式:服务器中的编码方式,传输过程中的编码方式,传输到达终端设备的编码方式。因此在传输 过程中就需要至少两次编码转换:首先从服务器编码转为网络编码,再从网络编码转为终端设备编码。在转换的过程中出现任何情况都可能出现编码混乱。

4.处理中文乱码问题常用三种方式解决

  (1)由于大部分终端设备都支持Unicode字符集,所以在连接网页时,我们希望网页数据在网络传输时使用UTF-8方式传输,我们就可以将UTF-8 转化为Unicode字符集。下面我们将通信过程中得到的流转化为字节,然后再将字节按GB2312 的方式进行转换得到字符串。

       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;

             i++;

      }

     resultData = new String (bytearray,"GB2312");//网络中以字节想形式默认为UTF-8进行编码,以GB2312显示到终端

     通过上面的转换,“resultData”字符串便可以显示中文效果了。

      (2)另一种方式是书记在传递的过程中使用ISO-8859-1字符集,这样就是直接使用了ASCII编码方式,当然在传递到终端设备时,需要将其数据反转才能够正常的显示。下面我们将一个字符串按ISO-8859-1字符集进行转换为gbk,代码如下:

      public static String formatStr(String str){

        if(str==null || str.length()==0){

          return "";

       }

       try{

         return new String (str.getBytes("ISO-8859-1"),"gbk");  //先在网络中以ISO-8859-1进行编码,再以gbk输出到终端

     }

    }

3. 第三种比较简单

InputStream is = conn.getInputStream();

BufferedInputStream bis = new BufferedInputStream(new InputStreamReader(is,"gb2312"));//gbk也行

这样设置下相当于直接用默认编码转为byte数组,再用指定的编码编成字符

总结:归根结底,解决中文乱码只需要两个步骤

·使用getBytes("编码方式");来对汉字进行重编码,得到它的字节数组。

·再使用new String (Bytes[],"解码方式");来对字节数组进行相应的解码。

转载地址:http://phrfm.baihongyu.com/

你可能感兴趣的文章
Common Techniques to Improve Shadow Depth Maps
查看>>
2011年11月11日成都微软虚拟化研讨会
查看>>
如何通过DB link进行远程过程或函数调用
查看>>
Linux命令--群组管理相关
查看>>
互联网泄密门蔓延:客户资料银行内部几乎透明
查看>>
表单以get方式提交出现中文乱码解决办法
查看>>
在cisco交换机上禁止某个特定MAC地址转发
查看>>
Exchange 2010之灾难恢复
查看>>
我的友情链接
查看>>
Mac commands
查看>>
关于清理distribution数据库过期数据
查看>>
VMware Horizon View 7: Create Events Database [Part 3]
查看>>
我的友情链接
查看>>
深入解析thinkphp中的addAll方法
查看>>
SSD上如何进行数据保护?
查看>>
Linux基础之文件系统简介及其系统管理工具
查看>>
我的友情链接
查看>>
PutText 在图像上显示文字
查看>>
我的友情链接
查看>>
Juniper T320 Control Board 0更换步骤
查看>>