java中的字符都是以Unicode进行编码的, 那么何谓"java中的字符"?是在xx.java文件中声明的字符么?那么以下这段小代码:
public class TestEncoding2 {
 public static void main(String[] args) throws Exception {
  String s = "abc你好么";
  byte[] bytes1 = s.getBytes("Unicode");
  System.out.println(bytes1.length); // 14
  byte[] bytes2 = s.getBytes();
  System.out.println(bytes2.length); // 9
 }

这段代码里哪些部分是叫做"java中的字符"?(我在java中声明的字符串s,显然不是"java中的字符"呀,他的字节数和Unicode类型不同。真的晕了)

解决方案 »

  1.   

    这里面有一个输入和输出问题了!java内部完全是unicode,但是1 你传输给java的字符是unicode的吗?如果不是,且转码错误,那么可能出现在无法显示的字符区域
    2 java输出到屏幕或者其它设备,支持unicode吗?大家最习惯的可能是GBK了,可是如果java发送过来的是一个GBK字符集不支持的怎么办呢?也只好显示?了所以,许多人建议用UTF-8这个编码,因为他和unicode是互通的,更符合国际化系统的要求。
      

  2.   

    以Unicode和default platform charset分别编码 自然会不同了
    unicode: -2 -1 0 97 0 98 0 99 79 96 89 125 78 72 
    UTF-8: 97 98 99 -60 -29 -70 -61 -61 -76 
      

  3.   

    byte[] bytes1 = s.getBytes("Unicode"); 
      System.out.println(bytes1.length); // 14 不好意思,问一下,上面这段为什么显示的是14,而不是12??
      

  4.   

    在java中, 字符要用char来声名:
    例如:
    char c = 'c';
    每一个字符占用两个字节,无论是英文字符,还是中文字符(这个和c里面不同.).
    unicode当然是7*2=14了.
    分数拿来.
      

  5.   

    String.getBytes()的问题
    在中文操作系统中,getBytes方法返回的是一个GBK或者GB2312的中文编码的字节数组,其中中文字符,各占两个字节。而在英文平台中,一般的默认编码是“ISO-8859-1”,每个字符都只取一个字节(而不管是否非拉丁字符)。 
      

  6.   

    String s = = "abc你好么";虽然只有6个字符,但这个字符串还有一个结束标志\0,也要占用一个字符.
    .所以加起来占用有7个字符,也就是14个字节.不知道是不是这样,请高手指点一下.
      

  7.   


    哪些字符算是java内部的字符?何谓“java内部"?
      

  8.   

    内部==任何字符都需要保存,java就采用了unicode保存,这就产生了在输入和输出的编码转化问题。
    一般unicode占用2个字节,可以表示65536个字符,JDK6增加到3个字节。比如ASCII只需要1个字节,在unicoe最前面的256个,汉字也在其中的一部分,总之,绝大部分已知的字符和文字都在里面有对应的映射位置。
      

  9.   


    真的很感谢,其实每种编码的特点我都知道。我的疑问其实不在编码上,而是:
    搞不清楚什么叫做"java内部的字符",java调用了计算机上的某个GBK编码字符,那个字符就会转变成“java内部的字符"了么?请举些例子吧。哪些字符是java里的字符,哪些是计算机默认的字符。比如记事本里的字符是java里的字符么?java文件里写的字符是java里的字符么?