我通过php生成一个csv文件,可以通过浏览器下载。 我是否需要在开头插入字节顺序标记字节,考虑到将使用的目标系统可以是mac,unix,windows等?
答案 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以上的单个字符。