Re: Перекодировка из cp1251 в UTF8
От: Sergey J. A. Беларусь  
Дата: 18.09.06 09:24
Оценка:
Здравствуйте, wizard_mephi, Вы писали:

_>Товарищи, не дайте погибнуть. Проблема такая — нужно перекодировать текстовый файл в UTF8 из 1251. Хз почему, но не получается. Вернее получается, но не так — при попытке прочитать строку с кириллицей из файла с виндовой кодировкой вместо русских символов получаются вопросы (C#, VS2005). Чем и как надо читать файл, чтобы потом перегнать его через UTF8Encoding ?


Как именно неполучается ? Код давай. Примерно так должно быть:

Decoder decoder = Encoding.UTF8.GetDecoder();
Encoder encoder = Encoding.GetEncoding(1251).GetEncoder();

byte[] inByteBuff = new byte[4096];
char[] charBuff = new char[ine.GetMaxCharCount(inByteBuff.Length)];
byte[] outByteBuff = new byte[oute.GetMaxByteCount(charBuff.Length)];

using (FileStream inf = new FileStream(file, FileMode.Open, FileAccess.Read))
using (FileStream outf = new FileStream(outFile, FileMode.Create, FileAccess.Write))
{
    while (true)
    {
        int readed = inf.Read(inByteBuff, 0, inByteBuff.Length);
        int chars = decoder.GetChars(inByteBuff, 0, readed, charBuff, 0);
        int bytes = encoder.GetBytes(charBuff, 0, chars, outByteBuff, 0, false);

        outf.Write(outByteBuff, 0, bytes);

        if (readed == 0)
            break;
    }
}


Можно ещё проще — построчно, но в таком случае у меня были проблемы с последней пустой строкой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.