UTF-8 多字节和 bom

问题描述 投票:0回答:3

我读过这个很棒的教程
http://www.joelonsoftware.com/articles/Unicode.html

但我不明白UTF-8如何解决高端、低端机器的问题。 对于1byte来说,还可以。 对于多字节,它是如何工作的?

有人可以解释得更好吗?

unicode utf-8 character-encoding byte-order-mark
3个回答
5
投票

这里有一个深入解释 UTF-8 的链接。 http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8

其核心是,UTF-16 是面向短整数(16 位)的,而 UTF-8 是面向字节的。由于架构在数据类型的字节排序方式(大端、小端)方面可能有所不同,因此 UTF-16 编码可以采用任何一种方式。在我所知的所有架构上,半字节或半八位字节级别都没有字节序。所有字节都是一系列连续的 8 位。因此 UTF-8 没有字节序。

日语字符“あ”就是一个很好的例子。它是 U+3042(二进制=0011 00000100 0010)。

  • UTF-16BE: 30, 42 = 0011 0000 : 0100 0010
  • UTF-16LE: 42, 30 = 0100 0010 : 0011 0000
  • UTF-8:e3、81、82 = 1110 0011:10 0000 01:10 00 0010

这里有一些关于unicode的信息あ


1
投票

UTF-8 不存在字节序问题。 UTF-16 会出现问题,因为在将两个字节块的序列写入文件或通信流时,需要将其视为字节块的序列,这可能对两个字节中的字节顺序有不同的想法。字节数。由于 UTF-8 在字节级别工作,因此 BOM 无需能够在大端和小端机器上正确解析序列。字符是否是多字节并不重要:UTF-8 准确定义了在代码点的多字节编码情况下字符应该出现的顺序。

UTF-8 中的 BOM 是用于完全不同的东西(好吧,所以“字节顺序标记”这个名称有点“不对劲”)。它表明“这将是一个 UTF-8 流”。 UTF-8 BOM 通常不受欢迎,许多程序不能正确支持它。网站 utf8everywhere.org 认为它将来应该被弃用。


0
投票

Utf-8 没有字节序,因为只传输一个字节,不可能有字节序,因为每个字节都是按顺序处理的。也就是说,BOM 在 utf-8 中没有用,如果存在,则始终以相同的字节序列传输。

© www.soinside.com 2019 - 2024. All rights reserved.