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

コードページ番号を使用して、ターゲットのエンコーディングを指定できます。

var encoding = Encoding.GetEncoding(1251);

これはロシア語です。それが必要だと思います。

于 2013-06-06T18:52:27.977 に答える
0

読み取り操作には 1 つのエンコード (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 の使用は推奨されないことに注意してください。

于 2013-06-06T18:43:02.960 に答える