Совсем не понимаю эти ваши кодировки
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Здравствуйте. Пишу программу. На одном из этапов она должна считывать русские буковки из файла и сравнивать их с чем-либо. Тестирую ввод вот такой программой:
Вот результат запуска программы:
Вот содержание файла( пишу робота-исполнителя на информатику :) )
Причём на символы английского алфавита реакция нормальная.
В чём ошибка «последовательности байт в файле»?
А у тебя файл данных в какой кодировке? cp1251? cp866? UTF-8? UTF-16 (с разными последовательностями байт)?
UTF-8
porshe, вот чего тебе дома не сидится? Есть cp866, есть cp1251, так нет же, UTF-8 ему надо. Ну, получай свой геморрой:
Эта муть родилась после копания по форумам и в MSDN. Но она работает.
Но это ещё цветочки. Ягодки начнутся, когда ты парсить считанные строки будешь.
Учти один момент:
UTF-8
— это неwide char
. Этоmultibyte
.Описание MultiByteToWideChar() и иже с ней Unicode Functions .
windows
:)wifstream
,wstring
и т.д. работают не сunicode
(UTF-8
)?UPD
Поставил на виртуальной машине
windows
, действительно, ваш код работает. Спасибо.Считывать из файла UTF-8 надо как последовательность байт. Я, кстати, сомневаюсь в правильности использования текстового режима чтения. Наверное, корректнее было бы использовать двоичный. Правда тогда возникают сложности с разбивкой на строки: придётся читать просто блоками в буфер, а потом парсить.
Потом буфер с UTF-8 (multibyte) преобразуется в буфер
wchar_t
.Так обстоят дела в Винде. Как это организовано в Линуксе — я не разбирался.
Однако в стандартной библиотеке C в
<cstdlib>
есть функции, связанные с преобразованием Multibyte characters и Multibyte strings. Покопай в этом направлении.UPD: Ещё довесок по кодировкам, gcc, *nix, wchar_t и пр.
Спасибо