c# - 重写文本时不保留非英文字符

标签 c# .net text file-io character-encoding

我在一个客户站点上遇到了一个问题,其中包含诸如 "HabitaþÒo" 之类的词的行在输出时被破坏了。我正在处理一个文本文件(拉出选定的行并将它们写入另一个文件)

为了诊断,我将问题归结为一个只有那个坏词的文件。

原始文件不包含 BOM,但 .net 选择将其读取为 UTF-8。

当阅读和书写时,这个词最终看起来像这样的“Habita�o”。

BadWord.txt 文件的十六进制转储如下所示

enter image description here

用这段代码复制文件

using (var reader = new StreamReader(@"C:\BadWord.txt"))
using (var writer = new StreamWriter(@"C:\BadWordReadAndWritten.txt"))
    writer.WriteLine(reader.ReadLine());

. . .给。 . .

enter image description here

保留读者编码也没有做任何事情

using (var reader = new StreamReader(@"C:\BadWord.txt"))
using (var writer = new StreamWriter(@"C:\BadWordReadAndWritten_PreseveEncoding.txt", false, reader.CurrentEncoding))
    writer.WriteLine(reader.ReadLine());

. . .给。 . . enter image description here

知道这里发生了什么,我如何处理这个文件并保留原始文本?

最佳答案

唯一的方法是以相同的编码读取文件,它已被编码。这意味着 Windows-1252:

Encoding enc = Encoding.GetEncoding(1252);
string correctText = File.ReadAllText(@"C:\BadWord.txt", enc);

关于c# - 重写文本时不保留非英文字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14214103/

相关文章:

c# - 在 C# 中格式化 MAC 地址

javascript - Visual Studio 2015 文件打开速度很慢?

c# - 如何在 WPF 中获取 "Selected MenuItem"

c# - 创建与 AspNetUsers 表的关系

mysql - System.ComponentModel.Win32Exception : The client and server cannot communicate, 因为它们不具备通用算法

android - React-Native 中带有实心阴影的文本

c# - DbContext 与 Ninject ADO.NET

c# - costura.fody 用于引用另一个 dll 的 dll

c - 打印字符串的所有字符(包括转义序列)

mysql - 从文本字符串中提取数字