Unicode 什么';UTF-8和不带BOM的UTF-8的区别是什么?

Unicode 什么';UTF-8和不带BOM的UTF-8的区别是什么?,unicode,utf-8,character-encoding,byte-order-mark,Unicode,Utf 8,Character Encoding,Byte Order Mark,UTF-8和不带a的UTF-8有什么不同?哪个更好 没有BOM的UTF-8没有BOM,这并不意味着它比有BOM的UTF-8更好,除非文件的使用者需要知道(或从中受益)文件是否是UTF-8编码的 BOM通常用于确定编码的结束性,这在大多数用例中是不需要的 此外,对于那些不知道或不关心BOM的消费者来说,BOM可能是不必要的噪音/痛苦,并可能导致用户混淆。来源: 字节顺序标记(BOM)是Unicode 用于向用户发送信号的字符 文本文件的尾数(字节顺序) 或者小溪。其代码点为U+FEFF。 BOM表

UTF-8和不带a的UTF-8有什么不同?哪个更好

没有BOM的UTF-8没有BOM,这并不意味着它比有BOM的UTF-8更好,除非文件的使用者需要知道(或从中受益)文件是否是UTF-8编码的


BOM通常用于确定编码的结束性,这在大多数用例中是不需要的

此外,对于那些不知道或不关心BOM的消费者来说,BOM可能是不必要的噪音/痛苦,并可能导致用户混淆。

来源:

字节顺序标记(BOM)是Unicode 用于向用户发送信号的字符 文本文件的尾数(字节顺序) 或者小溪。其代码点为U+FEFF。 BOM表的使用是可选的,如果使用, 应该出现在文本的开头 流动除了它作为一种特殊用途之外 字节顺序指示符,BOM表 字符还可以指示以下哪一项: 几种Unicode表示法 文本是用密码编码的

始终在文件中使用BOM将确保它始终在支持UTF-8和BOM的编辑器中正确打开

我对于缺少BOM的真正问题如下。假设我们有一个包含以下内容的文件:

abc

在大多数编辑器中,如果没有BOM表,它将作为ANSI打开。因此,该文件的另一个用户打开它并附加一些本机字符,例如:

abg-αβγ

哎呀。。。现在文件仍然是ANSI格式,猜猜看,“αβγ”并没有占用6个字节,而是占用3个字节。这不是UTF-8,这会在以后的开发链中导致其他问题。

UTF-8 BOM是文本流开头的一个字节序列(
0xEF,0xBB,0xBF
),允许读者更可靠地猜测文件是否以UTF-8编码

通常,用于表示编码的结束,但由于结束度与UTF-8无关,因此不需要BOM

根据,不建议使用UTF-8文件的BOM

2.6编码方案 。。。UTF-8既不要求也不建议使用BOM,但在UTF-8数据从使用BOM的其他编码形式转换或BOM用作UTF-8签名的情况下可能会遇到。有关更多信息,请参阅中的“字节顺序标记”小节


在BOM的维基百科页面底部引用:

UTF-8既不要求也不建议使用BOM,但在UTF-8数据从使用BOM的其他编码形式转换或BOM用作UTF-8签名的情况下可能会遇到这种情况


其他优秀的答案已经回答了:

  • UTF-8和BOM ed UTF-8之间没有官方差异
  • BOM编码的UTF-8字符串将以以下三个字节开头<代码>EF BB BF
  • 从文件/流中提取字符串时,必须忽略这些字节(如果存在)
但是,作为附加信息,如果字符串是用UTF-8编码的,那么UTF-8的BOM可能是“嗅出”字符串的好方法。。。或者它可以是任何其他编码中的合法字符串

例如,数据[EF BB BF 41 42 43]可以是:

  • 合法字符串“ï»ABC”
  • 合法字符串“ABC”
因此,虽然通过查看第一个字节来识别文件内容的编码很酷,但您不应该依赖于此,如上面的示例所示

编码应该是已知的,而不是占卜的

UTF-8和没有BOM的UTF-8有什么不同

简短回答:在UTF-8中,BOM编码为文件开头的字节
EF BB BF

长答覆:

最初,它被期望编码为UTF-16/UCS-2。BOM表是为此编码表单设计的。当您有两个字节的代码单元时,有必要指出这两个字节的顺序,通常的做法是在数据的开头包含字符U+FEFF作为“字节顺序标记”。字符U+FFFE是永久未分配的,因此它的存在可用于检测错误的字节顺序

UTF-8具有相同的字节顺序,无论平台端号如何,因此不需要字节顺序标记。但是,它可能出现在从UTF-16转换为UTF-8的数据中(作为字节序列
EF BB FF
),或者作为“签名”来指示数据是UTF-8

哪个更好

没有。正如Martin Cote所回答的那样,Unicode标准并不推荐它。它会导致非BOM感知软件出现问题

检测文件是否为UTF-8的更好方法是执行有效性检查。UTF-8对哪些字节序列是有效的有严格的规则,因此误报的概率可以忽略不计。如果一个字节序列看起来像UTF-8,那么它很可能就是。

BOM会在某处某处发出隆隆声(没有双关语(原文如此))。当它繁荣时(例如,浏览器、编辑器等无法识别),它会在文档的开头显示为奇怪的字符
ï»
(例如,HTML文件、响应等),并导致类似的尴尬


当它出现在难以调试的地方或者当测试被忽略时,这是非常恼人的。所以最好避免使用它,除非你必须使用它。

我从不同的角度看待这一点。我认为带BOM的UTF-8更好,因为它提供了有关文件的更多信息。只有在遇到问题时,我才使用不带BOM的UTF-8

我在我的页面上使用多种语言(甚至)已经很长时间了,当文件在没有BOM的情况下保存时,我用编辑器重新打开它们进行编辑(如前所述),一些字符已损坏

请注意,当您尝试使用UTF-8编码保存新创建的文件时,Windows经典会自动使用BOM表保存文件

我个人用BOM保存服务器端脚本文件(.asp、.ini、.aspx)和不带BOM的.html文件
<?xml version="1.0" encoding="UTF-8"?>
$file="\xEF\xBB\xBF".$string;
#!/bin/bash: No such file or directory
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
#!/usr/local/bin/perl
#!/usr/bin/env node
00 00 00 xx - UTF-32BE
00 xx 00 xx - UTF-16BE
xx 00 00 00 - UTF-32LE
xx 00 xx 00 - UTF-16LE
xx xx xx xx - UTF-8
00 00 FE FF - UTF-32BE
FE FF 00 xx - UTF-16BE
FF FE 00 00 - UTF-32LE
FF FE xx 00 - UTF-16LE
EF BB BF xx - UTF-8