C# 处理 UTF8 文本文件和度数字符

本文关键字:数字 字符 文件 处理 UTF8 文本 | 更新日期: 2023-09-27 18:34:34

我正在使用以下代码处理文本文件(VB6 源文件(

Encoding currentEncoding;
            using (var reader = new System.IO.StreamReader(_sourceFile, true))
            {
                 currentEncoding = reader.CurrentEncoding;
            }

......

var fileasText = File.ReadAllLines(_sourceFile, currentEncoding);

我将每一行传递到一个函数中,该函数执行(或者在这种情况下不执行(某个进程,进而返回一个字符串。我正在收集所有这些字符串,最后使用以下方法重写文本文件:

   File.WriteAllLines(Path.GetDirectoryName(_sourceFile) + @"'" + SourceFilename, newLines.ToArray(), currentEncoding);

这工作正常,但我丢失了一些特殊字符,例如学位字符。我在读取和写入文件时尝试了各种编码,但度数字符仍然变得混乱。这是我正在重写的实际源代码,因此使文件完美是相当重要的。

正在读取文本文件的当前编码(返回 UTF8(并使用它来对保存的文件进行编码,那么我为什么要弄乱字符呢?我没有更改编码方法。

感谢您的任何帮助

附言需要明确的是,函数不会更改包含损坏字符的行。该函数只是查看它并返回 false 以表示它不需要特殊处理。然后将该行添加到字符串数组中,并处理下一行。

C# 处理 UTF8 文本文件和度数字符

您必须设置编码。 StreamReader默认为 UTF8,这显然不是您的文件的实际内容。

我的猜测是你的文件实际上是Unicode...尽管它肯定是一种不同的编码。 当您有文本文件时,了解您的编码是什么至关重要,这样您就可以保证正确阅读它们。

// Reading
var fileasText = File.ReadAllLines(_sourceFile, Encoding.Unicode);
// Writing
File.WriteAllLines(Path.GetDirectoryName(_sourceFile) + @"'" + SourceFilename, 
     newLines.ToArray(), Encoding.Unicode);