public class Example8_7
{
public static void main(String args[])
{
byte d[]="Java天下好".getBytes();
String s=new String(d,4,1);
System.out.println(s);
s=new String(d,0,6);
System.out.println(s);
}
}这是我刚刚改编的程序,本来String s=new String(d,4,1);
这句是String s=new String(d,4,2);
的,这样的话第一个输出应该是“天”,然后我就是有点脑子发热,想看一下String s=new String(d,4,1);
会输出什么?但是发现输出的是‘?’号,然后我把"Java天下好"换成"Java你下好".
但是发现输出的还是‘?’号,我个人本来是想验证一下我下面的这个想法的:
首先,一个字符占两个字节,然后getBytes()则将小于255以下的两字节的char转化成一字节存放进byte中,将占两字节的超过255的字符(比如汉字字符)用两个byte存储,那么我现在输出
String s=new String(d,4,1);
中的s应该是”天“这个字二进制表示的前8位的那字呀,为什么不对呢????
我哪里被弄混乱了。。求大神啊
{
public static void main(String args[])
{
byte d[]="Java天下好".getBytes();
String s=new String(d,4,1);
System.out.println(s);
s=new String(d,0,6);
System.out.println(s);
}
}这是我刚刚改编的程序,本来String s=new String(d,4,1);
这句是String s=new String(d,4,2);
的,这样的话第一个输出应该是“天”,然后我就是有点脑子发热,想看一下String s=new String(d,4,1);
会输出什么?但是发现输出的是‘?’号,然后我把"Java天下好"换成"Java你下好".
但是发现输出的还是‘?’号,我个人本来是想验证一下我下面的这个想法的:
首先,一个字符占两个字节,然后getBytes()则将小于255以下的两字节的char转化成一字节存放进byte中,将占两字节的超过255的字符(比如汉字字符)用两个byte存储,那么我现在输出
String s=new String(d,4,1);
中的s应该是”天“这个字二进制表示的前8位的那字呀,为什么不对呢????
我哪里被弄混乱了。。求大神啊
一个汉字点两个byte这里的问号是乱码的意思吧,不是标准的问号字符
你的编码默认的是GBK,英文字符占一个字节,中文占两个字节,你new String(d,4,1),表示从第四个字节开始,取一个字节出来,这一个字节通过GBK转成字符串,当然就会乱码,乱码就会显示成问号。除非你取出的这个字节的值刚好有一个英文字符在GBK里面有对应的编码。