【发布时间】:2011-06-28 01:30:59
【问题描述】:
我正在通过 php 生成一个 csv 文件,以便通过浏览器下载。 考虑到将使用的目标系统可以是 mac、unix、windows 等,我是否需要在开头插入字节顺序标记字节?
【问题讨论】:
-
Unicode 标准明确规定,对于 UTF-8,BOM既不需要也不推荐。
标签: php encoding csv utf export-to-csv
我正在通过 php 生成一个 csv 文件,以便通过浏览器下载。 考虑到将使用的目标系统可以是 mac、unix、windows 等,我是否需要在开头插入字节顺序标记字节?
【问题讨论】:
标签: php encoding csv utf export-to-csv
不,您不需要这样做。
字节顺序标记用于某些 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。
【讨论】:
关于原始问题,这实际上取决于文件在写入时的编码方式。如果它是 utf-8 编码的,我会添加 BOM。如果文件中只有 ASCII 字符,则 BOM 可能不存在,因为没有序列。但是,如果文件中包含 utf-8 序列,则更容易检测 BOM 以遍历整个文件并检查有效序列。即使您检测到单个序列,它仍然可能是 0x7F 以上的单个字符。
【讨论】: