gpt4 book ai didi

unicode - 在大型字节序计算机上,UTF-8的字节顺序是否与小型字节序计算机上的字节顺序不同?那么为什么UTF-8不需要BOM?

转载 作者:行者123 更新时间:2023-12-03 08:48:44 26 4
gpt4 key购买 nike

UTF-8可以包含BOM。但是,
没有区别
字节流的字节序。 UTF-8
始终具有相同的字节顺序。


如果Utf-8将所有代码点存储在一个字节中,那么为什么字节序不起作用以及为什么不需要BOM是很有意义的。但是由于128和以上的代码点是使用2、3和最多6个字节存储的,这意味着它们在大字节序计算机上的字节顺序与小字节序计算机上的字节顺序不同,因此我们如何声明Utf-8始终具有相同的字节顺序?

谢谢

编辑:


UTF-8面向字节


我知道如果两个字节的UTF-8字符C由字节B1和B2组成(其中B1是第一个字节,B2是最后一个字节),那么使用UTF-8时,这两个字节总是被写入相同的顺序(因此,如果将此字符写入小字节序计算机LEM上的文件,则B1将是第一个,而B2最后一个。类似地,如果将C写入大字节序计算机 BEM仍将是第一个,而 B1仍将是最后一个)。

但是,如果将 B2写入 C上的文件 F,但是我们将 LEM复制到 F并尝试在那里读取它,会发生什么?由于 BEM自动交换字节( BEM现在是最后一个字节,而 B1是第一个字节),因此读取 B2的app(在 BEM上运行)如何知道是否在 F上创建了F,因此顺序为2字节未交换,或者是否从 BEM传输了 F,在这种情况下 LEM自动交换了字节?

我希望问题有道理

编辑2:


回应您的编辑:big-endian
机器不交换字节,如果您询问
他们一次读取一个字节。


a)哦,所以即使字符C是2个字节长,读入F的app(驻留在BEM上)一次也只能读到内存中(因此它将首先读到内存B1中,然后才读到B2中)

b)


在UTF-8中,您决定如何处理
字节基于其高位


假设文件F具有两个后续字符C和C1(其中C由字节B1和B2组成,而C1具有字节B3,B4和B5)。读取F的应用程序如何通过简单地检查每个字节的高位来知道哪些字节属于同一字节(例如,如何确定B1和B2一起代表一个字符,而不是B1,* B2 *和B3)?


如果您认为自己看到了
有所不同,请修改您的
问题并包括


我不是那个意思我根本不明白发生了什么

c)为什么Utf-16和Utf-32也不也是字节定向的?

最佳答案

在大字节序与小字节序的机器上,对于大于字节的字/整数,字节顺序有所不同。

例如在big-endian机器上,一个2字节的短整数在第一个字节中存储8个最高有效位,在第二个字节中存储8个最低有效位。在little-endian机器上,8个最高有效位将是第二个字节,第一个字节中的8个最低有效位。

因此,如果将这样的short int的内存内容直接写入文件/网络,则short int中的字节顺序将根据字节顺序而有所不同。

UTF-8是面向字节的,因此关于字节序没有问题。第一个字节始终是第一个字节,第二个字节始终是第二个字节,依此类推,无论字节序如何。

关于unicode - 在大型字节序计算机上,UTF-8的字节顺序是否与小型字节序计算机上的字节顺序不同?那么为什么UTF-8不需要BOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com