UTF-8和UTF-8与BOM有什么不同?哪个更好?
当前回答
只有当文件实际包含一些非ascii字符时,UTF-8和BOM才有用。如果包含了它,而没有任何ASCII,那么它可能会破坏旧的应用程序,否则将文件解释为纯ASCII。当遇到非ASCII字符时,这些应用程序肯定会失败,因此在我看来,只有当文件可以并且不应该再被解释为纯ASCII时,才应该添加BOM。
我想说清楚的是,我宁愿没有BOM。如果一些旧的垃圾没有它就坏了,那么就添加它,替换遗留应用程序是不可行的。
不要制作UTF-8的BOM之外的任何东西。
其他回答
从http://en.wikipedia.org/wiki/Byte-order_mark:
字节顺序标记(BOM)是一个Unicode 符号的符号 文本文件的字节顺序 或流。其编码点为U+FEFF。 BOM使用是可选的,如果使用, 应该出现在文本的开头吗 流。除了它的特殊用途 字节顺序指示器,即BOM 字符也可以指示哪一个 几种Unicode表示 文本是用。
总是在文件中使用BOM将确保它总是在支持UTF-8和BOM的编辑器中正确打开。
我对缺少BOM的真正问题如下。假设我们有一个文件,它包含:
abc
如果没有BOM,在大多数编辑器中它会作为ANSI打开。所以这个文件的另一个用户打开它,并添加一些本机字符,例如:
abg-αβγ
哎呀……现在文件仍然在ANSI中,你猜怎么着,“αβγ”不占用6个字节,而是3个字节。这不是UTF-8,这会在开发链的后面引起其他问题。
我从另一个角度看这个问题。我认为UTF-8与BOM更好,因为它提供了更多关于文件的信息。我只在遇到问题时才使用没有BOM的UTF-8。
我在我的页面上使用多种语言(甚至西里尔字母)很长一段时间,当文件保存时没有BOM,我重新打开它们用编辑器编辑(cherouvim也指出),一些字符被损坏了。
请注意,当您尝试以UTF-8编码保存新创建的文件时,Windows的经典记事本会自动保存带有BOM的文件。
我个人保存带有BOM的服务器端脚本文件(.asp, .ini, .aspx)和没有BOM的.html文件。
应该注意的是,对于某些文件,即使在Windows上也不能有BOM。例如SQL*plus或VBScript文件。如果这样的文件包含BOM,则在尝试执行它们时会出现错误。
我用utf-8保存了一个自动热键文件,中文字符变得奇怪。
使用utf-8 BOM,工作正常。
AutoHotkey不会自动识别UTF-8文件,除非它以字节顺序标记开始。
https://www.autohotkey.com/docs/FAQ.htm#nonascii
当您希望显示以UTF-8编码的信息时,可能不会遇到问题。例如,将HTML文档声明为UTF-8,您将在浏览器中显示文档主体中包含的所有内容。
但在Windows或Linux上,当我们有文本、CSV和XML文件时,情况就不同了。
例如,Windows或Linux中的文本文件,这是最简单的事情之一,它(通常)不是UTF-8。
保存为XML并声明为UTF-8:
<?xml version="1.0" encoding="UTF-8"?>
即使声明为UTF-8,它也不能正确显示(不能读取)。
我有一串包含法语字母的数据,需要将其保存为XML以进行联合。无需从一开始就创建UTF-8文件(更改IDE中的选项和“创建新文件”)或在文件开头添加BOM
$file="\xEF\xBB\xBF".$string;
我无法将法语字母保存在XML文件中。
推荐文章
- 用Python写入UTF-8文件
- c++中的_tmain()和main()有什么区别?
- HTML编码问题-显示“”字符而不是“ ”
- 将Unicode文本写入文本文件?
- PHP DOMDocument loadHTML没有正确编码UTF-8
- 我如何在JavaScript中使用unicode感知的正则表达式?
- 如何检查Python中的字符串是否是ASCII?
- 字符、码位、字形和字素之间的区别是什么?
- 如何将wstring转换为字符串?
- 什么是ANSI格式?
- 如何在Bash中回显4位Unicode字符?
- 如何使用vim更改文件的编码?
- 为什么这段反向写的代码打印“Hello World!”
- 重音字符的具体JavaScript正则表达式(变音符)
- UTF-8字节[]到字符串