|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.12.2011, 12:34 | #1 |
Регистрация: 06.12.2011
Сообщений: 8
|
Чтение файла в UTF-8(без BOM)
Доброго времени суток форумчане. Есть такая задача: Имеются лог файлы, нужно найти определенные слова в строке, далее сохранить в отдельный файл название файла, строку и номер строки. файлы в ZIP архиве в кодировке UTF-8(без BOM).
Вопрос собственно в том, как прочитать файл в кодировке UTF-8(без BOM) ? В C++ я новичок, как и в программирование всего 3 недели. Ищу нужные мне слова вот таким способом: Код:
|
06.12.2011, 12:40 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
BOM нужен только для того, чтобы понять, какая в файле кодировка (UTF-8, UTF-16, etc) и в каком она формате (LE/BE). Если формат и так известен, BOM не нужен.
Далее, чтобы сравнивать UTF-8 строку с образцом, нужно либо образец перевести в UTF-8, или, что лучше, исходный текст преобразовать в кодировку образца. В винде для этого есть WideCharToMultiByte() и MultiByteToWideChar() соответственно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
06.12.2011, 13:10 | #3 |
Регистрация: 06.12.2011
Сообщений: 8
|
Спасибо за разъяснение про BOM. А насчет функции WideCharToMultiByte() не могли ли привести пример, а то в MSDN я никак не могу с ним разобраться(
|
06.12.2011, 13:19 | #4 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
Cats_foot
если у тебя Visual Studio 2005 или выше, есть способ проще: FILE* fp = _wfopen(L"log.txt", L"rt, ccs=UTF-8"); ... fgetws(...); преобразование char -> wchar будет произведено автоматически.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
Последний раз редактировалось Rififi; 06.12.2011 в 13:25. |
06.12.2011, 14:01 | #5 |
Регистрация: 06.12.2011
Сообщений: 8
|
У меня VS 2008, а вот char в wchar у меня преобразовываться никак не хочет.
пишет "error C2664: 'fgetws' : cannot convert parameter 1 from 'char [10000]' to 'wchar_t *' |
06.12.2011, 14:05 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
дык читать то надо в wchar_t, а не в char.
я раньше вообще руками реализовывал чтение UTF8 файлов. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
06.12.2011, 14:19 | #7 | |
Регистрация: 06.12.2011
Сообщений: 8
|
Цитата:
Как я понимаю при чтение wchar_t мне нужно изменить fputs на fputws ? но в любом случае возникает еще одна ошибка с аргументами: error C2665: 'strstr' : none of the 2 overloads could convert all the argument types Немного покопавшись отключил Юникод... не помогло( |
|
06.12.2011, 14:28 | #8 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
Cats_foot
Как я понимаю при чтение wchar_t мне нужно изменить fputs на fputws ? но в любом случае возникает еще одна ошибка с аргументами: error C2665: 'strstr' : none of the 2 overloads could convert all the argument types Немного покопавшись отключил Юникод... не помогло( не только fputs, но все функции, работающие со строками. символы, закодированный в utf-8, могут не влезать в размер char (напримре русские символы - уже не влезают), поэтому тебе по-любому придется иметь дело с wchar_t. соответственно юзать wide-аналоги функций, например wcsstr и пр. подробнее смотри в msdn
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
06.12.2011, 14:32 | #9 | |
Регистрация: 06.12.2011
Сообщений: 8
|
Цитата:
|
|
06.12.2011, 15:02 | #10 |
Регистрация: 06.12.2011
Сообщений: 8
|
Всем огромное спасибо. Прочитал в этой кодировке) Буду дальше разбираться со своей программой, надеюсь не сильно буду вам докучать вопросами, хотя их еще много.
Тему можно закрыть. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Преобразовние Utf-16 <=> Utf-8 | hard-t | Общие вопросы C/C++ | 1 | 26.08.2011 13:54 |
Работа с BOM | Sparky | PHP | 9 | 03.12.2009 08:30 |
Excel VBA, Экспорт в txt, кодировка файла UTF-16 LE/UCS-2 Little Endian+еще один интересный вопрос | Maxximus | Microsoft Office Excel | 17 | 04.09.2009 20:03 |
Перезапись файла без путя или определение расположения файла программы | The Best | Общие вопросы Delphi | 4 | 13.07.2009 22:50 |