首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是BOM?

什么是BOM?
EN

Stack Overflow用户
提问于 2012-10-12 21:27:20
回答 4查看 4.1K关注 0票数 4

BOM是什么意思?我试着读了这篇文章,但没有真正理解它是什么意思。

我读到一些文本编辑器将BOM放在文件开头之前。它的用途是什么?

EN

回答 4

Stack Overflow用户

发布于 2012-10-12 21:33:53

BOM代表Byte Order Mark。简而言之,BOM被标记在文件的开头,以指示最高有效字节还是最低有效字节应该首先出现。

这会导致很多问题,尤其是UTF8。UTF8不使用物料清单,但有一个名为UTF8Y (或带有物料清单的UTF )的变体,它在文件的开头包含几个额外的字符。

发送带有UTF8编码类型的UTF8Y文件,会导致在文件开头发送一些额外的字节,并可能导致各种难以追踪的问题,包括文件类型无法正确解析,IE或JSON文件无法解码。

当我没有仔细检查文件类型时,我被别人的文件咬了几次。

我的建议:注意它的存在,永远不要有目的地使用它。

票数 13
EN

Stack Overflow用户

发布于 2012-10-12 21:33:53

字节顺序标记允许程序确定如何读取Unicode数据。在您的Wiki页面中:

由于Unicode可以编码为16位或32位整数,因此从任意源接收这些编码的计算机需要知道整数的编码字节顺序。

对于UTF-8,对于如何读取字节没有歧义,因此经常省略BOM。对于UTF-16和UTF-32,有必要知道如何解释字节,而BOM可以用于此目的。

请注意,Java在读取UTF-8BOM时存在问题,如果存在这些字符,则必须手动处理(有关Sun的一些链接,请参阅Reading UTF-8 - BOM marker )。

票数 5
EN

Stack Overflow用户

发布于 2012-10-12 21:44:36

我可能会介绍一些你已经知道的东西,但是这里...

要理解BOM的用途,您需要理解(至少在概念上) endian-ness的全部内容。

如果你在处理一个字节(8个二进制位),它是从右到左按重要性递增的顺序排列的(就像读一个普通的十进制数一样,比如"19")。只要您可以在单个字节中包含数字,这就足够简单了。一旦达到两个字节,就需要知道这两个字节中哪一个更重要,是高字节优先还是低字节优先。大端意味着最低的内存地址(或者最左边,继续类似于书写)包含更高的值-它延续了西方十进制数的趋势。从历史上看,英特尔一直是小端,而摩托罗拉一直是大端。(我最近没有看过,现在可能不同了。)

BOM只是一个标记,说明以哪种方式解释数据的字节顺序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12860120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档