【问题标题】:preserve special characters when writing all lines to text file将所有行写入文本文件时保留特殊字符
【发布时间】:2014-05-25 12:28:39
【问题描述】:

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

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

但是,当我将这些行写入文本文件时,结果如下:

CFACommunaut�Financi�reAfricaineBEACFranc CFACommunaut.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) 中显示得非常好,我在其中读取了所有内容。

【问题讨论】:

  • 我认为您在正确的编码机架上。不确定您需要哪一个,但应该是处理这些特殊字符的那个。
  • 我很想将其作为重复项关闭(例如 /questions/1025332/determine-a-strings-encoding-in-c-sharp 或 stackoverflow.com/questions/5864272/…)。您所要做的就是了解编码是什么,并找到正确的编码。
  • 如何获得结果?你的文本文件编辑器支持 Unicode 吗?
  • @CodeCaster,它只是记事本。我不知道它是否支持 unicode。
  • @Tim,我都试过了,但我觉得很奇怪,从一个文本文件到另一个文本文件都很好,我得到了这个结果。

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


【解决方案1】:

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

你有三个选择:

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

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

    IMO 这是一个坏主意,但为了完整起见,我仍然提到它。

【讨论】:

  • 它必须对 BOM 做一些事情。我最终使用 BOM 将文本从 ANSI (IIRC) 转换为 utf8。我通过编码菜单使用记事本++进行了此转换。
猜你喜欢
  • 2018-09-29
  • 2018-05-22
  • 1970-01-01
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多