A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qmayuan 中级黑马   /  2013-8-3 11:23  /  1644 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s = "你好";
byte[] b1 =s.getBytes();  这个是编码;
System.out.pringln(Array.toString(bi));
.tostring 应该是解码么?为什么输出的是 【-28 -67 -96 -27 -91 -67】呢  解码不应该是输出String类型么?


评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
本帖最后由 肥猫 于 2013-8-3 11:26 编辑

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

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Array.toString(bi))只是将字节数组中的数字当成字符串进行返回,应该相当于""+b1[0]+....;所以输出的还是b1中存储的值.
回复 使用道具 举报
本帖最后由 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. }
复制代码
回复 使用道具 举报
你把s转换成byte时就已经解码了,你的编译器使用的gbk编码,一个中文是三个字节,然后你把这个编码放入了一个数组,所以输出的结果就是这样啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马