首先String以byte数组中的byte值为基础,用系统默认的格式进行编码生成一个字符串,如果你的系统的默认编码不支持中文的话,当然就不能输出回字,如果你的系统编码格式不支持中文,既可以在String中加第二个参数作为编码格式像gb2312,GBK等等.
你可以通过System.getProperty("file.encoding");取出你系统的默认编码格式.
也可以通过System.serProperty("file.encoding",charsetname);来设置编码格式.
你不要通过取得它的编码就认为它是补码表示的所以就将它转化为原码来表示,如果系统用补码你也就用补码,何必将它转化为原码呢?这是针对你上个问题所说的.
你可以通过System.getProperty("file.encoding");取出你系统的默认编码格式.
也可以通过System.serProperty("file.encoding",charsetname);来设置编码格式.
你不要通过取得它的编码就认为它是补码表示的所以就将它转化为原码来表示,如果系统用补码你也就用补码,何必将它转化为原码呢?这是针对你上个问题所说的.
是怎么从{-69,-40}算出“回”字的
可以参考string.java等源码
......
}
里究竟有哪些代码?
......
}
里究竟有哪些代码?
public String(byte[] b){
......
}
里究竟有哪些代码?
public String(byte[] b){
......
}
里究竟有哪些代码?
public String(byte[] b){
......
}
里究竟有哪些代码?
public String(byte[] b){
......
}
里究竟有哪些代码?
public String(byte[] b){
......
}
里究竟有哪些代码?
byte b[] = {-69, -40};
ByteToCharConverter converter = ByteToCharConverter.getConverter("gb2312");
char[] c = converter.convertAll(b);
String s = new String(c);
System.out.println(Integer.toHexString(c[0]));
System.out.println(Integer.toHexString('回'));
然后String s = new String(b);这一句的作用就是将字符行的b转换成字符串类型,结果就返回了一个汉字!
其实你可以把69和40换成别的数,结果也会输出汉字的!不过不能把负号丢了!
要是丢了就不是汉字了!
我想搂住一定是从c++转过来的高人,为什么问这样的问题.
throws UnsupportedEncodingException
{
if (charsetName == null)
throw new NullPointerException("charsetName");
checkBounds(bytes, offset, length);
value = StringCoding.decode(charsetName, bytes, offset, length); //in stringcoding.java
count = value.length;
}
字符第一位为1,意味着这个字符是一个负值。
这样楼主该明白了吧。
如果系统的编码规则变化了,那么相同的“0”“1”串,打印出来的结果也不一样拉。
至于你想知道到底是怎样实现的,安装JDK时选择安装源代码包,自己看看java.lang.String的源码
UP一下
byte流转化为char流的原因这相当于ByteBuffer bytebuffer里的内容为{-69,-40}char ch= Charset.forName( "gb2312" ).decode(bytebuffer);
那么ch 即为 "回"字可以看一下 nio里面的说明.