这里需要字节顺序标记吗?

时间:2011-02-16 02:11:24

标签: php encoding csv utf export-to-csv

我通过php生成一个csv文件,可以通过浏览器下载。 我是否需要在开头插入字节顺序标记字节,考虑到将使用的目标系统可以是mac,unix,windows等?

2 个答案:

答案 0 :(得分:3)

不,你不需要。

字节顺序标记用于某些Unicode编码,即UTF-8,UTF-16和UTF-32,以确定编码实际上是Unicode。

在UTF-16中,它用于区分UTF-16和UCS-2(UTF-16的子集)。

在UTF-8和UTF-32中是可选的,但有效。但是,在UTF-8中,它可能会导致兼容性问题。引用a well-phrased Wikipedia entry

  

如果与现有兼容   程序并不重要,BOM   可用于识别文件是否   在UTF-8中与传统编码相比,但是   由于许多原因,这仍然是个问题   添加BOM的实例或   删除而不实际更改   编码或各种编码   连在一起。检查是否   文本有效UTF-8更可靠   而不是使用BOM。

出于这些原因,我会反对在UTF-8中使用BOM。

答案 1 :(得分:0)

关于原始问题,它实际上取决于文件在编写时的编码方式。如果它将是utf-8编码我将添加BOM。如果文件中只有ASCII字符,则可能缺少BOM,因为没有序列。但是,如果utf-8序列在文件中,则更容易检测BOM,以便遍历整个文件并检查有效序列。即使您检测到单个序列,它仍然可能是0x7F以上的单个字符。