【问题标题】:UTF8 without BOM ends up in ANSI没有 BOM 的 UTF8 以 ANSI 结尾
【发布时间】:2026-01-22 11:10:01
【问题描述】:

使用下面的代码,我以 ANSI 编码结束了它。有什么想法吗?

Encoding utf8WithoutBom = new UTF8Encoding(false);
using (FileStream fs = new FileStream("c:\\text.txt", FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
    StreamWriter sw = new StreamWriter(fs, utf8WithoutBom);
    sw.Write("sfsdfsdfsdf");
    sw.Flush();
    sw.Close();
    fs.Close();
}

【问题讨论】:

  • "sfsdfsdfsdf" 在 UTF-8 中是 ASCII。

标签: c# encoding utf-8 byte-order-mark


【解决方案1】:

纯文本文件不会在任何地方保存它们所采用的编码方式,对于应该存储元信息的位置没有格式规范。最后你所拥有的只是一个包含一堆字节的文件。任何应用程序如何解释这些字节以及如何找出文件的编码方式都取决于任何应用程序。

带有纯 ASCII 字符的 UTF-8 与 ASCII 编码文件完全相同 与 ANSI 编码文件或“Latin-1”编码文件完全相同。原始字节没有区别。如果应用程序将该文件标识为 ANSI,则它与任何其他答案一样有效。

【讨论】:

  • 感谢您的回复。所以你说纯文本可以用 ASCII 表示,然后它是 ANSI 编码,即使我明确指定它为 UTF-8 编码?我只是尝试在纯文本中添加一些 UTF-8 字符,然后它是没有 BOM 的 UTF-8。
  • ASCII 字符集恰好与前 128 个 UTF8 字符代码和前 128 个 ANSI 字符代码相同。
  • @Lys 是的,以 UTF-8 保存的纯 ASCII 纯文本与 ASCII 或 ANSI 无法区分。您打开文件的应用程序只是错误地识别它(好吧,不是真的,因为假设它是 ANSI 是完全有效的)。也许你会想阅读What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text
最近更新 更多