文本编码问题

时间:2013-06-06 17:49:00

标签: c#

我用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天,但无法解决它= \

2 个答案:

答案 0 :(得分:0)

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

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

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

并且当编码参数传递相同的默认编码时,您将传递给Reader。

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

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

顺便说一下。请注意,不建议使用Encoding.Default。

答案 1 :(得分:0)

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

var encoding = Encoding.GetEncoding(1251);

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