免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: orclover
打印 上一主题 下一主题

为什么utf-8没有字节序问题? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-03-23 17:58 |只看该作者
按照我的理解,无非就是UTF-16统一采用两字节编码字符,而两个字节之间不存在明显的格式差异性,可以随便放,但是UTF-8几个字节之间存在格式差异,不能乱放。结果只是因为这个原因,导致UTF-16存在字节序问题。

求确认,知道的说个话,谢了先。

论坛徽章:
0
12 [报告]
发表于 2010-03-23 18:00 |只看该作者
只所以unicode存在这个问题,是因为unicode的编码与存储/传输格式是分开的。unicode只是规定一个32整数来编码。至于使用大端还是小端来表示一个整数,却没有明确规定。

论坛徽章:
0
13 [报告]
发表于 2010-03-23 18:01 |只看该作者
如果UTF-16一开始就声明,两个字节间的顺序有严格顺序(比如是大端),那么肯定也不存在所谓的字节序问题了。说到底也跟所谓的编码单元是字节还是word没关系。

论坛徽章:
0
14 [报告]
发表于 2010-03-23 18:03 |只看该作者
只所以unicode存在这个问题,是因为unicode的编码与存储/传输格式是分开的。unicode只是规定一个32整数来编 ...
pagx 发表于 2010-03-23 18:00



    刚发了一条就看到你的回复了,我感觉应该就是这个原因,多谢哈,现在在论坛上找人问个问题真不容易

论坛徽章:
0
15 [报告]
发表于 2010-03-23 18:35 |只看该作者
char都是没有字节序的问题吧!

论坛徽章:
0
16 [报告]
发表于 2010-03-23 21:26 |只看该作者
char都是没有字节序的问题吧!
liexusong 发表于 2010-03-23 18:35



    问题是涉及多个字节共同表示一个字符,一般是要考虑字节序的,只不过utf-8设计很拉风,避开了这个问题

论坛徽章:
0
17 [报告]
发表于 2010-03-23 21:27 |只看该作者
恩,
Unicode是"字符集"
而utf8 utf16le utf16be等等是"字符集编码"。
对于mbcs,字符集和字符集编码是合而为一的。

论坛徽章:
0
18 [报告]
发表于 2010-03-23 21:46 |只看该作者
如果按照char []没有字节序问题的原理理解,那么就是说它默认按照一定的顺序,从那个比较特殊的字节(也就是 ...
orclover 发表于 2010-03-23 17:34




以字节为单位编码的,无论一个汉字是多少个字节,都无字节序问题。
你注意,字节序问题不是指多个字节传输的先后,这个是固定的无异议的。而是指一个多字节编码在机器中的表示方式问题。
char str[] = "abaksdkakskasklasflk";这个无字节序问题。

int    str[] = {0x11223344, 2, 3 }就有字节序问题了。因为str[0]同样数值不同机器中表示不同。

论坛徽章:
0
19 [报告]
发表于 2010-03-23 22:06 |只看该作者
思一克说的对,我刚才跟朋友讨论了一下,其实我是把不同层面的“字节序”搞混淆了。

在网络编程中提到的字节序,其实在系统层面有专门的api进行转换,由于有统一的方法可以遵循,所以这个层面的字节序对开发者是透明的。

而剩下的, 就是字符编码内部的字节序了。比如UTF-16是用两个字节表示一个字符,但是这两个字符内部如何排序,系统并不知道,所以必须指定字节序。但是UTF-8由于几个字节表示并不相同,一定要从那个表示长度的字节开始读,相当于一开始就知道该从哪里是队头队尾,所以不存在字节序问题。

不知道我理解的对不对?

论坛徽章:
0
20 [报告]
发表于 2015-10-16 14:15 |只看该作者
orclover 发表于 2010-03-23 22:06
思一克说的对,我刚才跟朋友讨论了一下,其实我是把不同层面的“字节序”搞混淆了。

在网络编程中提到的 ...


也就是说,解码时,对于utf8编码,由于第一个字节记录了后续的字节(比如一共3个字节),所以读取后续字节(2个),然后解码就可以了。
而utf16,是定长编码,解码时每读取两个字节,就需要通过bom(byte order mark)来帮助区分高低位,从而达到解码目的,是这样吗?

如果以上所说的正确。那么很多人说因为
utf8是“单字节为编码单元”,所以不存在字节序列的问题?这种说法是不是有点片面,应该还得加上首字节记录了总字节数这个特点才达到了utf8无字节序的效果吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP