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

© qmayuan 中级黑马   /  2013-8-3 11:23  /  2184 人查看  /  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中存储的值.
回复 使用道具 举报
你把s转换成byte时就已经解码了,你的编译器使用的gbk编码,一个中文是三个字节,然后你把这个编码放入了一个数组,所以输出的结果就是这样啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马