Здравствуйте, Neavirc, Вы писали:
N>Проблема в следующем: очень хочется работать с libmysqlclient, используя utf8-строки для обработки результатов SQL-запроса.
N>В ответ на SQL-запрос libmysqlclient (предварительно специальным образом пнутый) возвращает utf8-строку в обычном const char* (т.е. один символ в таком массиве может быть представлен несколькими байтами). Такую строку можно вывести в cout, можно даже создать из нее std::string, но вот удобно с такой строкой работать уже нельзя (нельзя, например, вытащить произвольный символ обычным оператором [] и сравнить с символьным литералом).
N>Поэтому я написал простенький конвертер (потом правда узнал про мега-штуку iconv, но конвертер был уже написан) из utf8 в ucs2 составляющий std::wstring. Но терзают меня смутные сомнения, что есть способ удобно работать с utf8 строками не конвертируя их в ucs2.
N>Вопросы:
N>1. Решение с конвертацией utf8 в ucs2 с целью использовать wstring (а потом обратно) — оно вообще нормальное? Мне не нравится. N>2. Есть ли возможность используя только стандартную библиотеку удобно работать с utf8-строками? N>3. Есть ли utf8 строки в Boost? Очень хочется поработать с boost, но в онлайн документации ничего подходящего не нашел. А повод, чтобы начать был бы хороший.
Здравствуйте, ., Вы писали:
.>А это в принципе нельзя. Точнее можно, но с линейной сложностью.
Ну... Если очень хочется — то можно заранее построить индексы.
Проблема в следующем: очень хочется работать с libmysqlclient, используя utf8-строки для обработки результатов SQL-запроса.
В ответ на SQL-запрос libmysqlclient (предварительно специальным образом пнутый) возвращает utf8-строку в обычном const char* (т.е. один символ в таком массиве может быть представлен несколькими байтами). Такую строку можно вывести в cout, можно даже создать из нее std::string, но вот удобно с такой строкой работать уже нельзя (нельзя, например, вытащить произвольный символ обычным оператором [] и сравнить с символьным литералом).
Поэтому я написал простенький конвертер (потом правда узнал про мега-штуку iconv, но конвертер был уже написан) из utf8 в ucs2 составляющий std::wstring. Но терзают меня смутные сомнения, что есть способ удобно работать с utf8 строками не конвертируя их в ucs2.
Вопросы:
1. Решение с конвертацией utf8 в ucs2 с целью использовать wstring (а потом обратно) — оно вообще нормальное? Мне не нравится.
2. Есть ли возможность используя только стандартную библиотеку удобно работать с utf8-строками?
3. Есть ли utf8 строки в Boost? Очень хочется поработать с boost, но в онлайн документации ничего подходящего не нашел. А повод, чтобы начать был бы хороший.
Здравствуйте, Neavirc, Вы писали:
N>Поэтому я написал простенький конвертер (потом правда узнал про мега-штуку iconv, но конвертер был уже написан) из utf8 в ucs2 составляющий
Немного не по теме
Есть ещё хорошая библиотека ICU от IBM. Она позволяет сделать тоже, что и iconv. Конвертирует символы из одной кодировки в другую
Может быть вам это будет интересным!?
Neavirc wrote:
> удобно с такой строкой работать уже нельзя (нельзя, например, вытащить > произвольный символ обычным оператором [] и сравнить с символьным > литералом).
А это в принципе нельзя. Точнее можно, но с линейной сложностью.
Этот цикл
Cyberax wrote:
> .>А это в принципе нельзя. Точнее можно, но с линейной сложностью. > Ну... Если очень хочется — то можно заранее построить индексы.
Уж проще в ucs перевести. И интуитивно кажется, что будет быстрее.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай