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

时间:2014-05-25 12:28:39

标签: c# file-io special-characters file.readalllines

我有几行包含这些行的特殊字符:

  

CommunautéFinancièreAfricaineBEACFranc(XAF)   CommunautéFinancièreAfricaineBCEAOFranc(XOF)

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

  

CFACommunautFinancireAfricaineBEACFranc   CFACommunautFinancireAfricaineBCEAOFranc

这是我写行的方式:

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

我还通过File.WriteAllLines()尝试了Encoding的第3个参数。但这也没有帮助。

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)中显示得非常好,我在其中阅读了所有内容。

1 个答案:

答案 0 :(得分:1)

除非您添加BOM,否则记事本无法识别UTF-8。

您有三种选择:

  1. 决定记事本是愚蠢的,忽略了这个问题。更好的编辑会认可UTF-8。
  2. 添加BOM。使用var utf8WithBom = new Utf8Encoding(true, true)作为第二个参数。
  3. 使用旧版编码。指定Encoding.Default作为第二个参数。

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

    IMO这个是一个坏主意,但我仍然提到它是完整的。