黑马程序员技术交流社区
标题:
关于字符的一些小问题,ASCII码Unicode码。。。
[打印本页]
作者:
想飞的鱼
时间:
2014-5-2 10:36
标题:
关于字符的一些小问题,ASCII码Unicode码。。。
在张孝祥老师《Java就业培训教程》中看到,Java中字符占2个字节,是用Unicode编码的,比如可以'\u0061'表示一个字符:
class ChTest
{
public static void main(String[] args)
{
char ch = '\u0061';//Unicode码值表示一个字符
System.out.println(ch);//结果输出 a
System.out.println((int)ch);//结果输出97
/*
问题:在 内存 中字符 a 的表示应该是这样:a的ASCII码值为97,
97的二进制为 0000-0000 0110-0001 占2个字节,但是ASCII编码不是1个字节就可以么?
还有Unicode码又是干嘛的?和ASCII码有什么联系和区别?
*/
}
}
复制代码
既然字符是通过相应ASCII码值的二进制形式存储在内存,那么字符是Unicode编码的又是什么意思?求解~
作者:
神马
时间:
2014-5-4 00:49
本帖最后由 神马 于 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Ⅱ码。)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2