singlepost

c++ std unicode << На главную или назад  

[vs2003]

Как прочитать unicode-строку из файла? Первое, что пришло в голову:

wifstream file("file.txt");
wstring str;
getline(file, str);

Однако оказалось, что из wifstream чтение идет всё равно по байтам. Получилось, что каждый байт из файла превратился в unicode-символ в строке str. Это полная фигня.
Выяснилось, что и из ifstream, и из wifstream метод get считывает побайтно. Тогда в чем между ними разница? Полный бред.
Гугл не помог. Удалось найти только такой же кусок кода, который я привел. Но он не работает.
Таки как прочитать unicode-строку?

8 ответов в теме “c++ std unicode”

  1. 7
    Алексей Терещенко ответил:

    Да я бы с радостью. Сам я для своих нужд использую ту же Java. Но тут не я выбрал С++. Пришлось помудохаться. Не думал, что всё будет настолько плачевно.

  2. 6
    Леонид Максимов ответил:

    не вопрос. возьмите другой язык.

  3. 5
    Алексей Терещенко ответил:

    Надо, чтобы язык позволял работать с unicode штатными средствами, а не через прикрепление к локали непонятно откуда взятых кусков кода.

  4. 4
    Леонид Максимов ответил:

    надо читать по байтам, а затем преобразование типов? :)

  5. 3
    Алексей Терещенко ответил:

    Если кому-то будет интересно, вот результаты расследования:

    качаем: //groups.yahoo.com/group/boost/files/codecvt.zip

    пишем:

    #include "codecvt.cpp"

    wifstream input;
    wstring str;
    input.imbue(locale(input.getloc(), new ucs2_conversion()));
    input.open("file.txt");
    getline(input, str);
    wcout << str << endl;

    Это отвратительно, но это работает. Ненавижу unicode в с++.

  6. 2
    Алексей Терещенко ответил:

    Не, всё не то. Я тут уже вычитал, что нужно использоваться codecvt facet'ы. Но всё равно получается бред. Чтобы прочитать unicode-строку из файла, я должен использовать какие-то сторонние классы. А родная библиотека языка это сделать не позволяет.
    Вот, блин, всё в с++ люблю, кроме шаблонов и работы с unicode.

  7. 1
    Иван Горбачев ответил:

    //www.cprogramming.com/tutorial/unicode.html

    сразу на что наткнулся. проверить не успеваю, ибо счас уже надо бежать.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.