dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

UFT-8 to Windows-1251

Останнє повідомлення 11-03-2007, 17:29 від slash. 3 відповіді.
Сортувати: Попереднє Наступне
  •  11-03-2007, 3:20 4581

    UFT-8 to Windows-1251

    Є функція, що читає Теги з заголовку Ogg файла

    Результатом роботи є String^
    Свято грибів і форелів
    Якщо його перекодувати в з UFT-8 у Windows-1251 вийде
    Свято грибів і форелів

    А як його перекодувати? Хотілося б, щоб це відбувалося одразу при зчитуванні, бо як перекодувати вміст повернутого String^ я знаю.

    Коротше щось треба змітити тут : text += td->GetEncoding(1251)->GetString(byt);

    Код функції

    String^ BOggtags::readNext(FileStream^ fs, System::Text::UTF8Encoding^ & td)

    {

    String^ text = "";

    array<Byte>^ byt = gcnew array<Byte>(1);

    do

    {

    fs->Read(byt,0,1);

    if (byt[0] == 0x00) //the tag is finished: all tags are followed by 0? and one or more 00

    {

    text = text->Remove(text->Length-1, 1); //remove the 0? byte

    break;

    }

    else if (byt[0] == 0x01) //0x01 is at the end of all tags. no more tags in the file

    break;

    text += td->GetEncoding(1251)->GetString(byt);

    } while (true);

    return text;

    }

  •  11-03-2007, 3:37 4582 у відповідь на 4581

    Re: UFT-8 to Windows-1251

    Ось код який виконує перекодування з вашої строки з "крякозябами" у нормальну строку:

            Dim Source = "Свято РіСЂРёР±С–РІ С– форелів"
            Console.WriteLine(Text.Encoding.UTF8.GetString(Text.Encoding.GetEncoding(1251).GetBytes(Source)))

    Щодо вашого коду, мені здається що GetEncoding(1251) треба замінита на GetEncoding(65001)


    Artyom Krivokrisenko
    Web Reflection, Development Department
  •  11-03-2007, 11:39 4584 у відповідь на 4582

    Re: UFT-8 to Windows-1251

    дякую, завдяки вам вирішив проблему так:

    замість return text;
        return Text::Encoding::UTF8->GetString(Text::Encoding::GetEncoding(1251)->GetBytes(text));

    більше нічого не змінював. 65001 це utf-8, так? я одразу так і писав, але отримував не те щоби пусте значення text, а декілька пробілів у ньому...
    тільки я трохи не розумію, як це працює. ми двічі перекодовуємо у win-1251... мда...

  •  11-03-2007, 17:29 4586 у відповідь на 4584

    Re: UFT-8 to Windows-1251

    kirpi:
    дякую, завдяки вам вирішив проблему так:

    замість return text;
        return Text::Encoding::UTF8->GetString(Text::Encoding::GetEncoding(1251)->GetBytes(text));

    більше нічого не змінював. 65001 це utf-8, так? я одразу так і писав, але отримував не те щоби пусте значення text, а декілька пробілів у ньому...
    тільки я трохи не розумію, як це працює. ми двічі перекодовуємо у win-1251... мда...



    Почему же дважды???
    Этим получаешь объект кодировки для 1251 и вызываешь его метод
    Text::Encoding::GetEncoding(1251)->GetBytes(text)

    а этим

    Text::Encoding::UTF8->GetString

    объект кодировки для UTF8 и вызываешь его перегруженный метод.



    С уважением, Вячеслав
Переглядати як новосний Блог RSS в XML