[vs2003]
Как прочитать unicode-строку из файла? Первое, что пришло в голову:
wifstream file("file.txt");
wstring str;
getline(file, str);
Однако оказалось, что из wifstream чтение идет всё равно по байтам. Получилось, что каждый байт из файла превратился в unicode-символ в строке str. Это полная фигня.
Выяснилось, что и из ifstream, и из wifstream метод get считывает побайтно. Тогда в чем между ними разница? Полный бред.
Гугл не помог. Удалось найти только такой же кусок кода, который я привел. Но он не работает.
Таки как прочитать unicode-строку?
16 января 2009 в 5:01
Да я бы с радостью. Сам я для своих нужд использую ту же Java. Но тут не я выбрал С++. Пришлось помудохаться. Не думал, что всё будет настолько плачевно.
15 января 2009 в 19:03
не вопрос. возьмите другой язык.
15 января 2009 в 3:05
Надо, чтобы язык позволял работать с unicode штатными средствами, а не через прикрепление к локали непонятно откуда взятых кусков кода.
14 января 2009 в 18:04
надо читать по байтам, а затем преобразование типов?
14 января 2009 в 9:02
Если кому-то будет интересно, вот результаты расследования:
качаем: //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 в с++.
14 января 2009 в 8:04
Не, всё не то. Я тут уже вычитал, что нужно использоваться codecvt facet'ы. Но всё равно получается бред. Чтобы прочитать unicode-строку из файла, я должен использовать какие-то сторонние классы. А родная библиотека языка это сделать не позволяет.
Вот, блин, всё в с++ люблю, кроме шаблонов и работы с unicode.
14 января 2009 в 8:02
//www.cprogramming.com/tutorial/unicode.html
сразу на что наткнулся. проверить не успеваю, ибо счас уже надо бежать.