UTF之间有什么不同?

没有BOM的UTF-8和UTF-8有什么区别? 哪个更好?


UTF-8 BOM是一系列字节(EF BB BF),允许读者将文件标识为以UTF-8编码。

通常,BOM用于表示编码的字节顺序,但由于字节顺序与UTF-8无关,所以BOM不是必需的。

根据Unicode标准, 不推荐使用UTF-8文件BOM

2.6编码方案

...对UTF-8既不要求也不推荐使用BOM,但可能会在UTF-8数据从使用BOM的其他编码形式转换或使用BOM作为UTF-8签名的上下文中遇到。 有关更多信息,请参见第16.8节“特殊内容”中的“字节顺序标记”小节。


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

  • UTF-8和BOM-UTF-8之间没有正式的区别
  • BOM编辑的UTF-8字符串将以下面三个字节开头。 EF BB BF
  • 从文件/流中提取字符串时,必须忽略这些字节(如果存在)。
  • 但是,作为附加信息,对于UTF-8的BOM而言,如果字符串是以UTF-8编码的话,它可能是一种很好的方式,或者它可能是任何其他编码中的合法字符串......

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

  • 合法的ISO-8859-1字符串“ABC”
  • 合法的UTF-8字符串“ABC”
  • 因此,虽然通过查看第一个字节来识别文件内容的编码可能很酷,但不应该依赖于此,如上例所示

    编码应该是已知的,不是必须的。


    将BOM放入UTF-8编码文件至少有三个问题。

  • 不包含文本的文件不再为空,因为它们始终包含BOM。
  • 保存在UTF-8的ASCII子集内的文本的文件不再是它们自己的ASCII码,因为BOM不是ASCII,这使得一些现有的工具出现故障,用户可能无法替换这些传统工具。
  • 无法将多个文件连接在一起,因为每个文件现在都有一个BOM。
  • 而且,正如其他人所提到的那样,使用BOM来检测UTF-8是不够的,也是不必要的:

  • 这是不够的,因为任意字节序列可能以构成BOM的确切序列开始。
  • 这不是必须的,因为您可以像读取UTF-8一样读取字节; 如果成功,则根据定义,它是有效的UTF-8。
  • 链接地址: http://www.djcxy.com/p/78429.html

    上一篇: What's different between UTF

    下一篇: java.lang.RuntimeException: An error occured while executing doInBackground(