将所有行写入文本文件时保留特殊字符

本文关键字:文件 保留 特殊字符 文本 | 更新日期: 2023-09-27 18:05:07

我有几行包含特殊字符,如以下行:

CommunauteFinanciereAfricaineBEACFranc (XAF)CommunauteFinanciereAfricaineBCEAOFranc (XOF)

但是,当我将这些行写入文本文件时,得到的结果是:

CFACommunaut�Financi�reAfricaineBEACFrancCFACommunaut�Financi�reAfricaineBCEAOFranc

我是这样写的:

File.WriteAllLines(@"c:'file5.txt", lines);

我还通过传递一个Encoding来尝试File.WriteAllLines()的第三个参数。但这也无济于事。

File.WriteAllLines(@"c:'file5.txt", lines, Encoding.UTF8);File.WriteAllLines(@"c:'file5.txt", lines, Encoding.ASCII);

我是这样读取所有行的:

File.ReadAllLines(@"C:'file4.txt").ToList()
        .ForEach(g => 
            lines.Add(g.ToString()
            .Replace("/", string.Empty)
            .Replace("(", string.Empty)
            .Replace(")", string.Empty))
        );

不可思议的是,这些字符在另一个文本文件(file4.txt)中显示得很好,我在这个文件中读取了所有内容。

将所有行写入文本文件时保留特殊字符

记事本不识别UTF-8,除非您添加BOM。

你有三个选择:

  1. 决定记事本是哑的,忽略这个问题。更好的编辑器会识别UTF-8。
  2. 添加BOM。使用var utf8WithBom = new Utf8Encoding(true, true)作为第二个参数。
  3. 使用遗留编码。指定Encoding.Default作为第二个参数。

    生成的文件将损坏当前代码页中不存在的字符。在某些其他国家使用的系统上不能正确显示。

    在我看来,这是一个坏主意,但我仍然提到它的完整性。