Кодировка
Здравствуйте. Есть проблема следующего характера, работаю с файлом, но при этом на входе в программу файлы могут иметь различные кодировки (CP1251, KOI8-R), мне же после открытия файла необходимо осуществлять поиск подстроки в прочитанной строке, которая соответственно по разному воспринимается в зависимости от кодировки. Вопрос: есть ли в С++ какие-либо методы конвертирования строк из одной кодировки в другую, а также метод определения кодировки файла. Если нет, то правильно и оптимально ли я сделаю если буду искать по ASCII кодам???? И будет ли это как то влиять на кроссплатформенность приложения. Спасибо.
Для конвертирования я бы предложил весьма распространенный и достаточно кроссплатформенный iconv()
Упырь, ты в какой среде работаешь? Если в .NET, то там в С++ есть строки работающие с юникодом System::String, проблем быть не должно. Покрайней мере попробовать можно.
mbsnrtowcs (3) - convert a multibyte string to a wide-character string
mbsrtowcs (3) - convert a multibyte string to a wide-character string
mbstowcs (3) - convert a multibyte string to a wide-character string
wcscasecmp (3) - compare two wide-character strings, ignoring case
wcscat (3) - concatenate two wide-character strings
wcschr (3) - search a wide character in a wide-character string
wcscmp (3) - compare two wide-character strings
wcscpy (3) - copy a wide-character string
wcscspn (3) - search a wide-character string for any of a set of wid...
wcsdup (3) - duplicate a wide-character string
wcslen (3) - determine the length of a wide-character string
wcsncasecmp (3) - compare two fixed-size wide-character strings, ignorin...
wcsncat (3) - concatenate two wide-character strings
wcsncmp (3) - compare two fixed-size wide-character strings
wcsncpy (3) - copy a fixed-size string of wide characters
wcsnlen (3) - determine the length of a fixed-size wide-character st...
wcsnrtombs (3) - convert a wide-character string to a multibyte string
wcspbrk (3) - search a wide-character string for any of a set of wid...
wcsrchr (3) - search a wide character in a wide-character string
wcsrtombs (3) - convert a wide-character string to a multibyte string
wcsspn (3) - advance in a wide-character string, skipping any of a ...
wcsstr (3) - locate a substring in a wide-character string
wcstoimax (3) - convert wide-character string to integer
wcstok (3) - split wide-character string into tokens
wcstombs (3) - convert a wide-character string to a multibyte string
wcstoumax (3) - convert wide-character string to integer
wcswidth (3) - determine columns needed for a fixed-size wide-charact...
А для C++ -- std::wstring и локали (заголовочный файл locale).
Цитата: loki231
А ещё в стандартной библиотеке C есть wchar_t и куча функций
Только по-моему автор работает все же только с однобайтовыми кодировками. :)
Если программа будет работать в системной локали UTF-8 и при этом манипулировать отдельными не-ASCII символами - то однозначно перевод в wchar_t.
пишу на С++, с использованием QtCreator, компилятор MinGW 3.2 кажется, если это конечно важно. Советы в свободное время попробую использовать, там отпишусь, спасибо.
по поводу и iconv я в курсе, как раз им пока проблему и решаю, только что ты имеешь ввиду. Использовать iconv как еще одну программу или можешь предложить его исходники????
PS.И ещё QTextCodec, конечно.
PPS. iconv это не только программа, но ещё и функция. man 3 iconv