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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    在张孝祥老师《Java就业培训教程》中看到,Java中字符占2个字节,是用Unicode编码的,比如可以'\u0061'表示一个字符:
  1. class  ChTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char ch = '\u0061';//Unicode码值表示一个字符
  6.                 System.out.println(ch);//结果输出 a
  7.                 System.out.println((int)ch);//结果输出97

  8. /*
  9. 问题:在 内存 中字符 a 的表示应该是这样:a的ASCII码值为97,
  10.                                                                          
  11.                                                                             97的二进制为 0000-0000 0110-0001  占2个字节,但是ASCII编码不是1个字节就可以么?

  12.            还有Unicode码又是干嘛的?和ASCII码有什么联系和区别?

  13. */
  14.         }
  15. }

复制代码
既然字符是通过相应ASCII码值的二进制形式存储在内存,那么字符是Unicode编码的又是什么意思?求解~


1 个回复

倒序浏览
本帖最后由 神马 于 2014-5-4 16:46 编辑

不是所有的字符都是ASCⅡ码的,比如中文字符。ASCⅡ码只包含了英文字符,而Unicode几乎包含了世界上所有语言的字符。UCS是Unicode的简写。Unicode有两个标准UCS-2和UCS-4,前者采用双字节编码,后者采用四字节。JAVA默认采用的是操作系统平台使用的编码格式,windows是GBK,Linux是UTF-8。另外,Unicode是字符集,同时也是一种编。因为很多文档、程序都是英文的,英文用一个字节就能表示,为了节省空间所以出现了UTF-8编码,UTF-8是一种针对Unicode的可变长度字符编码,例如“汉”字的Unicode编码是6C49,utf-8是3个连续的字节E6 B1 89来表示它UTF-8的英文字符编码与ASCⅡ码完全相同。也就是说UTF-8兼容ASCⅡ码。当首字节的起始位为0时表示英文字符,起始位为1时,根据编码规则,与后面的字节一同表示一个其他字符。(GBK的原理也是一样的,兼容ASCⅡ码。)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马