黑马程序员技术交流社区

标题: 关于Unicode编码的疑问 [打印本页]

作者: 钱智慧    时间: 2012-3-4 23:53
标题: 关于Unicode编码的疑问
总是听说java采用的编码是Unicode码表,现在也没弄明白这是什么意思,毕老师在讲字符编码的时候曾说“中间其实走了Unicode”,但老师并未详细讲,老师说的是什么意思呢?对于编码,之前看过方老师的Web视频,我是这样理解的,以什么码表写就当你什么码表读,我们经常讨论的也就是几种编码:ISO8859-1,UTF-8,GB2312(GBK),所谓的Unicode到底是如何体现的?请高人指教
作者: 黑马肖凯骏    时间: 2012-3-5 00:26
这样跟你讲吧!比如说字母‘a’ 的编码在unicode中是用97表示的


而所有的编码系统加起来有差不多几百种,比如说有的编码给‘a’指定的是86,有的指定的'56'


这样就会出现问题了吧,java为了解决想这样的问题,就采用了unicode编码系统,给每一个字符制定了唯一的数值

这样的话,就在任何语言,平台,程序中都可以安心使用了吧!
作者: 钱智慧    时间: 2012-3-5 11:40
黑马肖凯骏 发表于 2012-3-5 00:26
这样跟你讲吧!比如说字母‘a’ 的编码在unicode中是用97表示的

您看看这段代码

  1. String msg="你好";
  2. byte[] bytes=msg.getBytes("iso8859-1");                       
  3. String msg2=new String(bytes,"UTF-8");
复制代码
首先将msg按照iso码表编码,并将来到的字节存入数组
然后按照u8解码,乱码是肯定的了,我的问题,整个过程中用到了Unicode码表么?怎么用的?
作者: 马胜平    时间: 2012-3-5 11:56
在JAVA中字符只有一种形式存在那就是Unicode,JAVA虚拟机本身不常用任何编码方式直接使用它们在字符集中的编号,这是统一唯一的办法。JAVA在虚拟机内部字符统一使用Unicode表示并不是说JAVA虚拟机是采用Unicode编码。
例如你在程序中写到 char han='永';在内存相应的区域这个字符表示为0x6c38,反过来
char han=0x6c38  System.out.println(han)输出永,其实说明只要你正确读入了永那么在JVM内存表示的一定是
0x6c38,没有任何其他值能代表这个字




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2