V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
papertiger9919
V2EX  ›  问与答

UTF8 为什么不需要 BOM?

  •  
  •   papertiger9919 · 2023-04-10 17:15:40 +08:00 · 1441 次点击
    这是一个创建于 600 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言  ·  2023-04-10 19:18:37 +08:00
    感谢各位 v 友的回答,大概了解了,UTF8 的编码规则里面没用到 BOM ,也就是说 utf8 制定编码规则的时候就没有考虑用 BOM ,而 utf16 的编码规则里面用到了 BOM 。
    这是两个不相关的编码规则,不能放在一起比较
    7 条回复    2023-04-10 18:18:02 +08:00
    shyangs
        1
    shyangs  
       2023-04-10 17:23:16 +08:00
    BOM 用來區分 UTF-16BE 和 UTF-16LE 。

    UTF-8 又沒有 big-endian 和 little-endian 的區分。
    crab
        2
    crab  
       2023-04-10 17:45:17 +08:00
    不需要字节序判断。但 win 系统如果用记事本存储为 utf-8 默认会加 efbbbf 。
    choury
        3
    choury  
       2023-04-10 17:51:25 +08:00
    utf-8 解析是一个字节一个字节读取的,当然不存在字节序的问题,但是 utf-16 每次需要读 2 个字节,这个时间就要区分这两个字节是大端还是小端的啊
    sadfQED2
        4
    sadfQED2  
       2023-04-10 17:53:32 +08:00 via Android
    我只知道加 bom 会导致各种各样奇奇怪怪的问题,所以我不加
    DeltaC
        5
    DeltaC  
       2023-04-10 17:54:46 +08:00
    因为 UTF8 码元是 1 个 BYTE ,UTF16 码元是 1 个 WORD ,码元是最小单位。
    DeltaC
        6
    DeltaC  
       2023-04-10 18:02:50 +08:00
    现在计算机以字节作为最小寻址单位,当码元大于 1 个字节时,才会存在端序问题。
    hahastudio
        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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   955 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:32 · PVG 04:32 · LAX 12:32 · JFK 15:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.