Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: с++, mysql and utf-8  (Прочитано 1450 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн boa86

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
с++, mysql and utf-8
« : 22 Декабря 2010, 12:55:20 »
Добрый день!
Хочу спросить совета и помощи в своей проблеме:)

Я пишу небольшую прогу в ubuntu на с++ для обработки данных из mysql
проблема в том что в mysql данные хранятся в utf8 и после выполнения запроса, функция mysql_fetch_row возвращает данные в типе char*, а не wchar_t*. Причем что интересно, данные возвращаются в кодировке utf8, просто представленные как тип char*. Если этот набор байт вывести последовательно на консоль, то все ОК
эта особенность делает невозможной работу с символами, т.к. utf8 многобайтная кодировка, а char* - однобайтное представление символов.

вопрос такой - как переконвертировать строковые данные представленные в виде набора байт типа char*  в wchar_t* ?

вот код для иллюстрации проблемы
надеюсь на совет как правильно работать с utf8! :)

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 22 Декабря 2010, 13:44:03 от truegeek »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: с++, mysql and utf-8
« Ответ #1 : 22 Декабря 2010, 13:49:26 »
ты не поверишь, но UTF-8 это и есть массив char'ов.
UTF-8 это кодировка с переменной длиной символа
ответ такой:
man mbstowcs

Оффлайн boa86

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: с++, mysql and utf-8
« Ответ #2 : 23 Декабря 2010, 14:38:23 »
ты не поверишь, но UTF-8 это и есть массив char'ов.
UTF-8 это кодировка с переменной длиной символа
ответ такой:
man mbstowcs

т.е. для того чтобы работать с каждым символом строки utf8, я обязательно должен сначала конвертнуть ее в wchar_t ?

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: с++, mysql and utf-8
« Ответ #3 : 23 Декабря 2010, 17:05:47 »
Если тебе нужно обязательно работать с ними как с символами, то всё равно можно не конвертировать ничего в wchar_t а использовать библиотеки для работы с utf8, например http://utfcpp.sourceforge.net/

Правда в очень многих случаях можно даже и без этого обойтись. Например если вся информация которую действительно нужно парсить влазит в ASCII, то в случае UTF-8 ты можешь просто забить на то, что у тебя многобайтовая кодировка, так как она полностью обратно совместима с ASCII.

Оффлайн boa86

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: с++, mysql and utf-8
« Ответ #4 : 27 Декабря 2010, 19:21:03 »
спасибо за советы
во всем разобрался :)

 

Страница сгенерирована за 0.025 секунд. Запросов: 22.