黑马程序员技术交流社区

标题: 编码解码问题 [打印本页]

作者: qmayuan    时间: 2013-8-3 11:23
标题: 编码解码问题
String s = "你好";
byte[] b1 =s.getBytes();  这个是编码;
System.out.pringln(Array.toString(bi));
.tostring 应该是解码么?为什么输出的是 【-28 -67 -96 -27 -91 -67】呢  解码不应该是输出String类型么?



作者: 肥猫    时间: 2013-8-3 11:25
本帖最后由 肥猫 于 2013-8-3 11:26 编辑

你在你的IDE上打中文就已经编码了.输出一串数字说明没解码成功,而且还是GBK
作者: 吴光新    时间: 2013-8-3 12:33
你这默认GBK编码,解码是new String(b1,"GBK"),手机打不方便,你直接打印这句话就应该解码了
作者: sergio    时间: 2013-8-3 14:36
我们可以看下JDK中对这两个方法的解释。 、
byte[] getBytes() : 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
String toString() :返回此对象本身(它已经是一个字符串!)。
所以返回值,就是这样的结果,你已经转换成了byte序列并存储到一个数组中,然后调用toString()方法返回对象本身。

作者: ☆今☆    时间: 2013-8-4 21:03
Array.toString(bi))只是将字节数组中的数字当成字符串进行返回,应该相当于""+b1[0]+....;所以输出的还是b1中存储的值.

作者: oath    时间: 2013-8-5 09:05
本帖最后由 oath 于 2013-8-5 09:13 编辑

楼主你好,呵呵,    楼主的帖子中有几个小疑点1、Array应该是Arrays吧,Array没有toString这个方法o,2可能因为电脑的原因,我的电脑上用eclipse“你好”转成的字节数组不一样呵。

正题
Arrays中的toString(byte[] b)方法,只是将字节数组表示出来的一种方式,没有将它解码
解码可以用String类中的构造函数进行
看下面的代码,
  1. class ToString
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String s = "你好";
  6.                 byte[] b1 =s.getBytes();// 编码;
  7.                
  8.                 //1
  9.                 System.out.println("b1.length:"+b1.length);//
  10.                 //2   打印数组中的元素
  11.                 for(int i=0;i<b1.length;i++)
  12.                         System.out.print("b1"+"["+i+"]"+"="+b1[i]+";  ");
  13.                                 //打印结果:b1[0]=-60;  b1[1]=-29;  b1[2]=-70;  b1[3]=-61;
  14.                
  15.                 /*3  Arrays类中的toString(byte[] b)方法返回的是b的一种形象的表示形式,这个表示形式是:将b中的元素用“[]”括起来,并将每个元素用“,”分隔
  16. 。并没有将b解码*/
  17.                 System.out.println("\nArrays.toString(b1):"+Arrays.toString(b1));
  18.                
  19.                 //4 String类中有一个构造方法,传入字节数组,可以对其进行解码,下面这句的输出结果是“你好”。
  20.                 System.out.println("new String(byte[] b)):"+new String(b1));
  21.         }
  22. }
复制代码

作者: lijia113    时间: 2013-8-6 20:59
你把s转换成byte时就已经解码了,你的编译器使用的gbk编码,一个中文是三个字节,然后你把这个编码放入了一个数组,所以输出的结果就是这样啊





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2