#unity/日常积累 **UTF-8 with BOM**(Byte Order Mark)是在 UTF-8 编码文件的开头加上特殊的字节序标记,用于指示该文件的编码方式。BOM 的字节序列为 `0xEF 0xBB 0xBF`,这是 Unicode 的零宽度非换行空格字符,用作 UTF 编码文件的标记。 ### 1. 什么是 BOM? BOM 是一个 Unicode 字符(U+FEFF),用于标识文件的字节顺序和编码。BOM 本身并不是文件内容的一部分,而是帮助文本编辑器、编译器和其他工具正确识别文件的编码。 ### 2. UTF-8 with BOM 的用途 - **编码识别**:在 Windows 上的某些文本编辑器(如 Notepad)会依赖 BOM 来自动识别文件编码。 - **兼容性**:某些工具在没有 BOM 的情况下可能无法识别 UTF-8 编码。 ### 3. UTF-8 with BOM 和 UTF-8 without BOM 的区别 - **有 BOM**:文件开头包含 BOM 标记,可以帮助一些应用程序识别编码,但有些程序可能会将 BOM 作为字符内容处理,造成显示问题。 - **无 BOM**:文件没有 BOM 标记,UTF-8 格式更紧凑,适合兼容性要求较高的场景。 ### 4. 如何在代码中处理 UTF-8 with BOM 在编程语言中,通常可以指定编码为 UTF-8 with BOM 或 UTF-8 without BOM。例如在 C# 中: ``` cs using System.IO; using System.Text; // 写入 UTF-8 with BOM File.WriteAllText("file_with_bom.txt", "Hello, World!", new UTF8Encoding(true)); // 写入 UTF-8 without BOM File.WriteAllText("file_without_bom.txt", "Hello, World!", new UTF8Encoding(false)); ``` - `new UTF8Encoding(true)`:指定写入 UTF-8 with BOM。 - `new UTF8Encoding(false)`:指定写入 UTF-8 without BOM。 ### 5. 检查文件是否包含 BOM 在文件开头读取字节并检查是否存在 BOM 标记的字节序列(0xEF, 0xBB, 0xBF)即可判断文件是否包含 BOM。