UTF8 为什么不需要 BOM?

2023-04-10 17:15:40 +08:00
 papertiger9919

BOM 用于标记大端序或小端序,utf16 需要 BOM 是因为一个字符可能用到多个字节存储,但是 utf8 也会用多个字节存储一个字符,为啥 utf8 不需要 BOM 呢?

问了 chatgpt ,稀里糊涂: https://imgloc.com/i/imd2MC

1254 次点击
所在节点    问与答
7 条回复
shyangs
2023-04-10 17:23:16 +08:00
BOM 用來區分 UTF-16BE 和 UTF-16LE 。

UTF-8 又沒有 big-endian 和 little-endian 的區分。
crab
2023-04-10 17:45:17 +08:00
不需要字节序判断。但 win 系统如果用记事本存储为 utf-8 默认会加 efbbbf 。
choury
2023-04-10 17:51:25 +08:00
utf-8 解析是一个字节一个字节读取的,当然不存在字节序的问题,但是 utf-16 每次需要读 2 个字节,这个时间就要区分这两个字节是大端还是小端的啊
sadfQED2
2023-04-10 17:53:32 +08:00
我只知道加 bom 会导致各种各样奇奇怪怪的问题,所以我不加
DeltaC
2023-04-10 17:54:46 +08:00
因为 UTF8 码元是 1 个 BYTE ,UTF16 码元是 1 个 WORD ,码元是最小单位。
DeltaC
2023-04-10 18:02:50 +08:00
现在计算机以字节作为最小寻址单位,当码元大于 1 个字节时,才会存在端序问题。
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/931306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX