免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 20862 | 回复: 6
打印 上一主题 下一主题

请教个UTF-8转GBK的问题,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-31 16:26 |只看该作者 |倒序浏览
目的:要从一个WEB server下载内容,格式为UTF-8, 要转换为GBK输出

出现的问题:只有部分中文字可以转换为GBK,不能转换的都输出为“?”号,比如“我”可以正常转换,但“道”字就不能正常转换了,大家帮帮看看是什么问题吧


代码如下:

  1.             
  2.                               String urlstring="http://**.com";
  3.                
  4.         try{

  5.                 URL url = new URL(urlstring);
  6.                 URLConnection conn = url.openConnection();
  7.                 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  8.                 String line = null;
  9.                 String buff="";

  10.                 while ((line = reader.readLine()) != null)   //读取内容
  11.                 buff=buff+line+"\n";

  12.                 reader.close();


  13.                 String GBK=new String(buff.getBytes("GBK"),"UTF-8");   //转换
  14.                
  15.                                  System.out.println(GBK);
  16.                
  17.                 }
  18.                 catch (MalformedURLException e)
  19.                 {
  20.                 e.printStackTrace();
  21.                 }
  22.                 catch (IOException e)
  23.                 {
  24.                 e.printStackTrace();
  25.                 }

复制代码

论坛徽章:
0
2 [报告]
发表于 2006-05-31 16:53 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2006-06-01 07:15 |只看该作者
String GBK=new String(buff.getBytes("GBK" ) ,"UTF-8" ) ;   //转换

是不是搞反了

  1. String GBK=new String(buff.getBytes("UTF-8" ),"GBK");   //转换
复制代码

即便如此,也无法解释部分转换的现象。

论坛徽章:
0
4 [报告]
发表于 2006-06-01 08:53 |只看该作者
原帖由 caojiqun 于 2006-6-1 07:15 发表

是不是搞反了

  1. String GBK=new String(buff.getBytes("UTF-8" ),"GBK");   //转换
复制代码

即便如此,也无法解释部分转换的现象。


是啊,部分转码,是个很迷惑人的现象

论坛徽章:
0
5 [报告]
发表于 2006-06-01 14:36 |只看该作者

问题已解决

解决问题的思路:

   1。先去了解了UTF-8的编码方法,将读出后BUFF的字串转换了byte数据,按16进制输出,发现不通转换的那些中文的编码不正常,比如“载”字,正确的UTF-8编码应该为E8BDBD ,但输出结果为E8BD3F,因此怀疑是WEB服务器传过来就有问题,但没理由的呀,浏览器显示却是正常的。
   2。用SNIFFER 抓取数据包来分析,数据包里的编码也没问题。。。会不会是java的数据流读取那里出了问题呢。
   3。更换读取数据流的方法,由读取String,改为读取byte(比读取String麻烦多了),输出。。一切都正常了。。
   
   

  1.                                String urlstring="http://**.com";
  2.                
  3.         try{
  4.                 URL url = new URL(urlstring);
  5.                 URLConnection conn = url.openConnection();
  6.                 InputStream in =conn.getInputStream();
  7.                 byte[] tempbuff=new byte[100];  //临时数组
  8.                 byte[] buff =new byte[10240];  //定义一下足够大的数组
  9.                 int count=0;   //读取字节个数
  10.                 int rbyte=0;   //每次读取的个数
  11.                
  12.                 while((rbyte=in.read(tempbuff))!=-1){   
  13.                         for(int i=0;i<rbyte;i++)
  14.                                 buff[count+i]=tempbuff[i];
  15.                         count+=rbyte;
  16.                 }
  17.             

  18.                 byte[] result=new byte[count];   
  19.                 for(int i=0;i<count;i++)
  20.                         result[i]=buff[i];                               
  21.                        
  22.                 String output=new String(result,"UTF-8");

  23.                 System.out.println(output);
  24.                
  25.                
  26.                
  27.                 }
  28.                 catch (MalformedURLException e)
  29.                 {
  30.                 e.printStackTrace();
  31.                 }
  32.                 catch (IOException e)
  33.                 {
  34.                 e.printStackTrace();
  35.                 }
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-06-01 19:45 |只看该作者
while ((line = reader.readLine()) != null)
你把行首行尾不属于中文字符的whitespace一起读进来了,然后把它当做字串的一部分进行转换,当然就出问题了。

论坛徽章:
0
7 [报告]
发表于 2006-06-02 08:06 |只看该作者

关于中文问题的解决

上我的博客上看看就知道了
我不博客是:zuzhiyang.cublog.cn
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP