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 BEM,因此没有交换两个字节的顺序或是否F从中转移LEM,在这种情况下BEM自动交换字节?
我希望问题有道理
编辑2:
响应您的编辑:如果要求大端机器一次读取一个字节,则不会交换字节.
a)哦,所以即使字符C是2个字节长,app(驻留在BEM上)读取F会在当时只读一个字节读入存储器(因此它将首先读入存储器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也不是面向字节的?
nos*_*nos 32
对于大于一个字节的字/整数,大端与小端机器的字节顺序不同.
例如,在大端机器上,2字节的短整数存储第一字节中的8个最高有效位,第二字节中的8个最低有效位.在小端机器上,8个最高有效位将是第二个字节,即第一个字节中的8个最低有效位.
因此,如果将这种短int的内存内容直接写入文件/网络,则short int中的字节顺序将根据字节顺序而有所不同.
UTF-8是面向字节的,因此没有关于字节序的问题.无论字节顺序如何,第一个字节始终是第一个字节,第二个字节始终是第二个字节等.
Cha*_*had 10
回答c):UTF-16和UTF-32将字符表示为16位或32位字,因此它们不是面向字节的.
对于UTF-8,最小单位是一个字节,因此它是面向字节的.算法一次读取或写入一个字节.在所有机器上以相同的方式表示字节.
对于UTF-16,最小单位是16位字,对于UTF-32,最小单位是32位字.该算法一次读取或写入一个字(2个字节或4个字节).在big-endian和little-endian机器上,每个字的字节顺序是不同的.
| 归档时间: |
|
| 查看次数: |
9287 次 |
| 最近记录: |