Проблемы с кодированием - PullRequest
       1

Проблемы с кодированием

0 голосов
/ 28 октября 2011

У меня большая проблема с кодировкой.Код, который я использую, должен работать, но это не так!

Вот код:

FileStream fs = new FileStream(saveFile, FileMode.Create, FileAccess.Write, FileShare.None);

System.IO.StreamWriter objWriter;
objWriter = new System.IO.StreamWriter(fs , Encoding.Unicode);
string textLine;
if (System.IO.File.Exists(readFile) == true)
{
    System.IO.StreamReader objReader;
    objReader = new System.IO.StreamReader(readFile, Encoding.Unicode);

    do 
    {
        textLine = objReader.ReadLine();
        if (textLine.IndexOf(searchString) != -1)
        {
            tempString = textLine;
            position1 = textLine.IndexOf(searchString);

            tempString = textLine.Substring(position1);
            if (tempString.IndexOf("(") != -1)
            {
                position2 = tempString.IndexOf("(");
                //MessageBox.Show(tempString.Length.ToString());
                tempString = tempString.Substring(0, position2);
            }
        }

        objWriter.WriteLine(textLine);
    } while (objReader.Peek() != -1);
}
objWriter.Close();
MessageBox.Show(tempString);
MessageBox.Show("Done!");

Мне нужно прочитать файл, который содержит смешанные английские символы и некоторые кириллические символыно после прочтения и обработки файла, когда я пытаюсь сохранить файл в новом месте, все кириллические символы "?"или какой-то другой неизвестный символ.Я перепробовал все возможные кодировки, и они не работают!

Ответы [ 2 ]

4 голосов
/ 28 октября 2011

Из примера, который вы опубликовали, кажется, что файл не имеет спецификации, но содержит кириллические символы.Без спецификации StreamReader не может угадать правильную кодировку.Таким образом, вы можете принять кодировку Windows-1251 , поскольку файл содержит символы кириллицы (согласно HEX-дампу, который вы показали в разделе комментариев).

Итак, вот что вы можете попробовать:

using (var reader = new StreamReader("input.txt", Encoding.GetEncoding("Windows-1251")))
using (var writer = new StreamWriter("output.txt", false, Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        // reading the input file line by line ...
        // perform the parsing and write to the UTF-8 output encoded file
        writer.WriteLine(line);
    }
}
1 голос
/ 28 октября 2011

Если вы не уверены в кодировке вашего входного файла, не указывайте его, позвольте проверять реализацию StreamReader.

Я подозреваю, что ваш исходный файл не Unicode, а скорее использует ваш локальныйКодировка Windows.

Создайте совершенно новый файл и не указывайте кодировку в считывателе.

objReader = new System.IO.StreamReader(readFile); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...