0

我以 ANSI 或 UTF-8 编码读取 txt 文件。Txt 文件由以下几行组成:

79005213750:hello
79005213751:привет
79005213752:серега

用这样的代码阅读它:

TextReader readFile = new StreamReader(file_path, Encoding.Default);
foreach (string line in ReadLineFromFile(readFile))
{}

private static IEnumerable<string> ReadLineFromFile(TextReader fileReader)
{
    using (fileReader)
    {
        string currentLine;
        while ((currentLine = fileReader.ReadLine()) != null)
        {
            yield return currentLine;
        }
    }
}

在所有用线进行的操作之后,我保存它们:

SaveFileDialog saveFile1 = new SaveFileDialog();

            saveFile1.DefaultExt = "*.txt";
            saveFile1.Filter = "TXT Files|*.txt";
            saveFile1.FileName = "rus_number-pass";
            if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK && saveFile1.FileName.Length > 0)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(saveFile1.FileName))
                foreach (string line in digits_ru)
                {
                    file.WriteLine(line);
                }
            }

在外面我收到:

79005213750:hello
79005213751:привет
79005213752:серега

但期望:

79005213750:hello
79005213751:привет
79005213752:серега

你能帮我吗?我在这个问题上杀死了 2 天,但无法解决它=\

4

2 回答 2

0

我相信您正在使用一种编码(Encoding.Default)进行读取操作,而另一种编码(UTF8)用于写入。

使用 System.IO.StreamWriter 构造函数的不同重载。比如这个

public StreamWriter(string path, bool append, Encoding encoding)

并作为编码参数传递您传递给阅读器的相同默认编码。

TextReader readFile = new StreamReader(file_path, Encoding.Default);

我认为在您在输出文件中看到预期的字符之后。

顺便提一句。请注意,不推荐使用 Encoding.Default。

于 2013-06-06T18:43:02.960 回答
0

您可以使用代码页号指定目标编码:

var encoding = Encoding.GetEncoding(1251);

哪个是俄语,我想这就是你需要的。

于 2013-06-06T18:52:27.977 回答