streamwriter无法正确保存unicode文件

Iul*_*ian 3 c# unicode streamwriter

我正在打开一个文本文件并删除第一行,以准备使用批量插入在数据库中导入.这是我的代码:

string tempFile = Path.GetTempFileName();
using (var sr = new StreamReader("F:\\Upload\\File.txt", System.Text.Encoding.UTF8))
{
    using (var sw = new StreamWriter(tempFile,true, System.Text.Encoding.UTF8))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            if (line.Substring(0, 8) != "Nr. Crt.")
                sw.WriteLine(line);
        }
    }
}

System.IO.File.Delete("F:\\Upload\\File.txt");
System.IO.File.Move(tempFile, "F:\\Upload\\File.txt");
Run Code Online (Sandbox Code Playgroud)

在此之后,如果我打开生成的文件,Unicode字符将替换为其他字符.例如,包含非中断空格的字符串(unicode U + 00A0):( Value 注意unicode char)将被转换Value�.

我怎么能避免这个?

编辑:

Notepad ++设置为'以UTF-8编码'这是一张它看起来如何的图片:

在此输入图像描述

Han*_*ant 7

转化为价值

这3个奇数字符的字节值是0xef 0xbd 0xbf.哪个是codepoint\ufffd的utf8编码,替换字符 .在读取 utf编码文本时使用的是文本包含无效的编码字节序列.

正好指出File.txt的一个问题,它可能没有在utf-8中编码.如果您不知道该文件使用了什么编码,那么第一个猜测就是将Encoding.Default传递给StreamReader构造函数.