![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Emura |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
подскажите пожалуйста последовательность действий для следующей задачи.
есть файл, текстовый в UTF-8. пытаюсь нарисовать его содержимое. с "нарисовать" думаю проблем нет, для этого нужен массив WCHAR. ...а вот как его извлеч из файла -призадумался чтото, хотя задача то вроде банальная. |
|||
|
||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
извлечь...
я же давал алгоритм может что-то непонятно?
далее чтение: http://forum.vingrad.ru/index.php?showtopi...t&p=1850770
lpszBuffer или buffer (там 2 способа), после этого будет содержать контент из UTF-8-файла -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
Emura |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
да-да, смотрел, но недопонял что-то, каша в голове от этих кодировок.. строк
![]() cейчас читаю файл в CHAR* так
может сначала прочитать в байты потом их конвертировать в CHAR или WCHAR?
GremlinProg, а есть еще варианты получить кол-во? Это сообщение отредактировал(а) Emura - 14.5.2009, 20:09 |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Emura, символ UTF-8 - не имеет постоянной длины (тут ANSI и UNICODE смешаны),
только ради расчета числа символов, я и прохожу файл дважды: первый раз, чтобы получить число символов, перед распределением буфера второй раз, чтобы их считать можно не файл дважды проходить, можно проходить и буфер дважды, но сделать это придется в любом случае файл обойти проще, тем более, текстовый, тут особенно оптимизировать просто нет смысла и проще всего для этого использвать CRT-стримы (stream), а не файлы API (CreateFile), потому что эта задача в CRT уже решена, велосипед изобретать не надо -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Emura |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 7.2.2009 Репутация: 1 Всего: 1 |
ок, спасибо за советы.
кстати, вот попробовал такое -рисует не потребное ![]()
Это сообщение отредактировал(а) Emura - 14.5.2009, 20:30 |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
есть, но цикл все равно нужен:
lpszInput - байтовый буфер, в который предварительно считан файл причем тут нужно четко определить, имеется ли в файле BOM это поле идентифиуирует кодировку файла в целом для UTF-8, это первые 3 байта EF BB BF если они присутствуют, то их нужно обязательно либо пропустить, либо вообще выбросить все это уже делает _tfopen_s, без нее - проверяй вручную, но перед инициализацией переменной file -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
нет, похоже так не получится
тут нужно еще указать кодировку в переменной file а в CRT она ассоциируется похоже только с файловым дескриптором так что только читать файл, либо переводить байты напрямую, в юникод: BytesToUnicode -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |