LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 820|回复: 6

utf-16的问题

[复制链接]
发表于 2006-12-30 17:25:21 | 显示全部楼层 |阅读模式
如果是utf-16编码的话,一个中文占两个字节,比如测的编码为0x6d4b,我的一个文件名为"12测.txt",系统是怎样识别0x6d4b为"测"的啊,它怎么不识别成m和K呢?
发表于 2006-12-30 17:36:46 | 显示全部楼层
呵呵!你不是自己说了两个字节吗?!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-30 17:54:39 | 显示全部楼层
是啊,"12测.txt"换成字节就是0x31 0x32 0x6d 0x4b 0x2e 0x74 0x78 0x74,那么系统读的时候可以读成"12kM.txt"啊,它怎么知道要把6d和4b一起读啊?
回复 支持 反对

使用道具 举报

发表于 2006-12-30 18:18:46 | 显示全部楼层
"12测.txt"换成字节就是0x31 0x32 0x6d 0x4b 0x2e 0x74 0x78 0x74
这哪是utf16
这是gbk吧
回复 支持 反对

使用道具 举报

发表于 2006-12-30 18:48:05 | 显示全部楼层
以下是Unicode和UTF-8之间的转换关系表:
  1. U-00000000 - U-0000007F: 0xxxxxxx
  2. U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
  3. U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
  4. U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  5. U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
  6. U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
复制代码
我们不讨论 UNICODE 与 UTF-8 之间的转换,只要楼主注意到 UTF-8 的码形规律,即:
通过一个编码的首字节的最高位的 1 的个数就可以判断出它是一个几字节的编码
回复 支持 反对

使用道具 举报

发表于 2006-12-30 21:53:00 | 显示全部楼层
看上面的规律,好像有些编码是要用到6个字节的?
请DODO兄说明一下。

以下给出HZK16的区位编码规律,跟什么UTF-8 UTF-16 GBK编码等无关(应该决然不同的吧)

HZ16共包括国标1、2级字库6763个汉字,分为16~87区,并按顺序在该字库文件中存储排列。

汉字内码:每个汉字对应2个字节,分为区编码和区内编码,例如:
        char ch[2];
        ch[0] = '\xb0'; //对应区编码
        ch[1] = '\xa1';//对应区内编码
        printf(ch); //将打印出第一个汉字“啊”
       
        ch[0]++对应下一个区的汉字
        ch[1]++对应同一个区的下一个汉字
       
       
特别:第55区仅含有89个汉字,除此之外,其他区均为94个汉字。
回复 支持 反对

使用道具 举报

发表于 2006-12-31 10:29:50 | 显示全部楼层
在 UTF-8 中包含了几乎全世界所有语言的编码,其中我们常用的有英文和中文,英文和 ASCII 码相同,中文一部分是二字节编码,一部分是三字节编码。至于 6 字节的,我想那可能是用于一些极生僻的语言或者是特殊符号的吧,我从没接触到过这部分的编码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表