Tii*_*ina 5 unicode character-encoding utf-8 endian
UNICODE 对一个字符使用 2 个字节,因此它有或大或小的 endian 差异。例如,字符 ? 是54 C8十六进制的。因此它的 UTF-8 是:
11100101 10010011 10001000
Run Code Online (Sandbox Code Playgroud)
UTF-8 使用 3 个字节来表示相同的字符,但它没有大端或小端。为什么?
use*_*686 35
注意:由于历史原因,Windows 对 UCS-2 使用术语“Unicode”——最初这是将Unicode 代码点编码为字节的唯一方法,因此区别并不重要。但在现代术语中,这两个例子都是 Unicode,但第一个具体是 UCS-2 或 UTF-16,第二个是 UTF-8。
UCS-2 有 big-endian 和 little-endian,因为它直接将代码点表示为 16 位“uint16_t”或“short int”数字,就像在 C 和其他编程语言中一样。它与其说是“编码”,不如说是数值的直接内存表示,并且因为 uint16_t 在不同机器上可以是 BE 或 LE,UCS-2 也是如此。后来的 UTF-16 只是为了兼容性继承了同样的烂摊子。
(它可能会被用于特定字节序定义,但我想他们认为这是超出范围或不得不之间代表着不同的硬件厂商或某事的人,我不知道实际的历史。妥协。)
同时,UTF-8 是一种可变长度编码,它可以使用 1 到 6 个字节的任意位置来表示 31 位值。字节表示与 CPU 架构完全没有关系;相反,有一种特定的算法可以将数字编码为字节,反之亦然。无论它在什么 CPU 上运行,该算法总是以相同的顺序输出或消耗位。
phu*_*clv 22
与为什么字节数组(char[]在 C 或byte[]许多其他语言中)没有任何关联的字节序但其他类型的数组比byte它大的原因完全相同。这是因为字节序是将多个字节表示的值存储到 memory 的方式。如果您只有一个字节,那么您只有一种方法将其存储到内存中。但是如果 anint由索引为 1 到 4 的 4 个字节组成,那么您可以以多种不同的顺序存储它,例如 [1, 2, 3, 4], [4, 3, 2, 1], [2, 1, 4, 3], [3, 1, 2, 4]...这是小端,大端,混合端...
Unicode 有许多不同的编码,称为Unicode 转换格式,主要的有 UTF-8、UTF-16 和 UTF-32。UTF-16 和 UTF-32分别以 16 位和 32 位为单位工作,很明显,当您将 2 或 4 个字节存储到字节寻址内存中时,您必须定义要读取/写入的字节顺序。UTF-8 OTOH 以字节为单位工作,因此它没有字节序
| 归档时间: |
|
| 查看次数: |
3682 次 |
| 最近记录: |