BOM 用于标记大端序或小端序,utf16 需要 BOM 是因为一个字符可能用到多个字节存储,但是 utf8 也会用多个字节存储一个字符,为啥 utf8 不需要 BOM 呢?
问了 chatgpt ,稀里糊涂: https://imgloc.com/i/imd2MC
1
shyangs 2023-04-10 17:23:16 +08:00
BOM 用來區分 UTF-16BE 和 UTF-16LE 。
UTF-8 又沒有 big-endian 和 little-endian 的區分。 |
2
crab 2023-04-10 17:45:17 +08:00
不需要字节序判断。但 win 系统如果用记事本存储为 utf-8 默认会加 efbbbf 。
|
3
choury 2023-04-10 17:51:25 +08:00
utf-8 解析是一个字节一个字节读取的,当然不存在字节序的问题,但是 utf-16 每次需要读 2 个字节,这个时间就要区分这两个字节是大端还是小端的啊
|
4
sadfQED2 2023-04-10 17:53:32 +08:00 via Android
我只知道加 bom 会导致各种各样奇奇怪怪的问题,所以我不加
|
5
DeltaC 2023-04-10 17:54:46 +08:00
因为 UTF8 码元是 1 个 BYTE ,UTF16 码元是 1 个 WORD ,码元是最小单位。
|
6
DeltaC 2023-04-10 18:02:50 +08:00
现在计算机以字节作为最小寻址单位,当码元大于 1 个字节时,才会存在端序问题。
|
7
hahastudio 2023-04-10 18:18:02 +08:00
UTF-8 怎么没有 BOM ? EF BB BF 是 BOM
Python 里叫 utf-8-sig 只不过大部分 UTF-8 不加 BOM ,官方也不推荐加。加 BOM 是为了方便判断文件用 UTF-8 编码。 https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8 |