obsidian/笔记文件/2.笔记/UTF-8 with BOM.md
2025-03-26 00:02:56 +08:00

1.8 KiB
Raw Permalink Blame History

#unity/日常积累

UTF-8 with BOMByte 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# 中:

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。