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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alive 中级黑马   /  2014-7-1 16:04  /  1149 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么打印出来的乱码呢?这确实是String的构造方法啊!是本地编码还是怎么了?真心有点不太适应高新技术的视频,脑袋浆糊了

QQ截图20140701160109.png (13.33 KB, 下载次数: 4)

QQ截图20140701160109.png

6 个回复

倒序浏览
本帖最后由 燿陚√揚葳 于 2014-7-1 16:40 编辑

你看下ASCII表,程序解析不了那些字符的,所以会乱码

回复 使用道具 举报
我开始也进场这样做,后来知道这样打就是乱码,就改方法了,不过我还是不知道为什么是乱码
public class StringDemo {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                byte[] b = {1,5,6,23,43};
                for(byte by: b){
                        String s = Byte.toString(new Byte(by));
                        System.out.println(s);
                }
        }
}
回复 使用道具 举报
我查了下API的定义
   String(byte[] bytes)
          通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
解释力有解码,使用的默认字符集来解码的,解码是把字节变成字符,这里使用了默认编码表GBK,可能里面没有这几个的字符吧。。。反正这个代码看着就别扭啊,我一般不这么写的额。利用String的有参构造很容易乱码的。老师在IO还是哪里讲过,我没找到,
回复 使用道具 举报
alive 来自手机 中级黑马 2014-7-2 15:31:52
报纸
燿陚√揚葳 发表于 2014-7-1 16:35
你看下ASCII表,程序解析不了那些字符的,所以会乱码

默认gbk编码
回复 使用道具 举报
别用GBK或者Unicode,你在编译器里设置一下改成ANSI试试。
反正我是这么解决的
回复 使用道具 举报
你用byte数组来构造字符串,实际上是每个byte元素转换成一个对应的ASCII字符,连起来就构成一个字符串。不过ASCII字符表中有不少字符,特别是序号低于40的字符,要么是乱码,要么是不可打印字符。你可以把byte数组的元素改大一点,比如65开始是大小写字母,就不会乱码了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马