【问题标题】:Should a BOM (byte order mark) be added for empty strings (UTF-16 and UTF-32)?是否应该为空字符串(UTF-16 和 UTF-32)添加 BOM(字节顺序标记)?
【发布时间】:2014-06-16 05:08:08
【问题描述】:

不包括 UTF-8,是否有一般的理解或不言而喻的约定,如果字符串为空,编码器可以(应该)安全地省略 BOM。

对于空字符串似乎是一种浪费,尤其是在发送到服务器时。 在这种情况下,编码类型和字节顺序将无关紧要。

是否有专门针对空字符串处理 BOM 的 RFC?

谢谢。

【问题讨论】:

    标签: utf-16 string byte-order-mark convention utf-32


    【解决方案1】:

    BOM 通常仅在没有关于字符串编码的其他外部信息时使用。对文本文件有意义,数据必须是自描述的,但对于传输协议则不然,除非没有其他可用的编码信息,例如 HTTP 中的 Content-Type 标头,HTML 的 <meta> 标记,hard-由协议规范或协议扩展等编码。

    对于简单地将字符串存储在内存中,如果您正确跟踪字符串,BOM 将毫无用处。此外,根据您实际使用的特定字符串类型,空字符串可能会或可能不会实现为 NULL 指针,因此您可能无论如何都无法包含 BOM。

    不,没有关于一般 BOM 用法的 RFC。

    【讨论】:

    • 在我的例子中,编码字符串作为一些通用二进制数据的一部分被发送到服务器进行处理/存储。服务器如何存储它并不重要,但在服务器到达时,它可能会在解包数据时严格检查/要求/执行 BOM。然而,对于一个空字符串,这没有意义。服务器应该关心吗?
    • @Dabbu,这听起来像是一个自定义协议。您将不得不询问负责服务器的人员以了解他们的期望。这取决于他们。
    • @Dabbu:协议应该规定使用的任何字符串的编码。如果您用来与服务器通信的协议没有规定特定的编码,您将不得不与协议供应商/作者联系以找出答案。
    • 在这种情况下,我同时控制客户端和服务器。我想这个问题更多的是关于 BOM 理论,关于最佳编码实践。
    • 如果你能控制两端,那么在你的协议中指定编码。我建议使用 UTF-8 而不是 UTF-16。
    猜你喜欢
    • 2020-05-29
    • 2010-09-12
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    相关资源
    最近更新 更多