黑马程序员技术交流社区

标题: 打印的乱码怎么说 [打印本页]

作者: alive    时间: 2014-7-1 16:04
标题: 打印的乱码怎么说
为什么打印出来的乱码呢?这确实是String的构造方法啊!是本地编码还是怎么了?真心有点不太适应高新技术的视频,脑袋浆糊了

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

QQ截图20140701160109.png

作者: 燿陚√揚葳    时间: 2014-7-1 16:35
本帖最后由 燿陚√揚葳 于 2014-7-1 16:40 编辑

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


作者: 人心如水    时间: 2014-7-1 17:51
我开始也进场这样做,后来知道这样打就是乱码,就改方法了,不过我还是不知道为什么是乱码
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);
                }
        }
}
作者: 人心如水    时间: 2014-7-1 17:58
我查了下API的定义
   String(byte[] bytes)
          通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
解释力有解码,使用的默认字符集来解码的,解码是把字节变成字符,这里使用了默认编码表GBK,可能里面没有这几个的字符吧。。。反正这个代码看着就别扭啊,我一般不这么写的额。利用String的有参构造很容易乱码的。老师在IO还是哪里讲过,我没找到,
作者: alive    时间: 2014-7-2 15:31
燿陚√揚葳 发表于 2014-7-1 16:35
你看下ASCII表,程序解析不了那些字符的,所以会乱码

默认gbk编码
作者: I'm_permanent.    时间: 2014-7-2 15:34
别用GBK或者Unicode,你在编译器里设置一下改成ANSI试试。
反正我是这么解决的
作者: fantacyleo    时间: 2014-7-2 15:42
你用byte数组来构造字符串,实际上是每个byte元素转换成一个对应的ASCII字符,连起来就构成一个字符串。不过ASCII字符表中有不少字符,特别是序号低于40的字符,要么是乱码,要么是不可打印字符。你可以把byte数组的元素改大一点,比如65开始是大小写字母,就不会乱码了




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