@sitev_ru
sitev.ru - мой блог ...

Существует ли тип/класс или какой-то подход для работы с Unicode String на С++?

Какой тип/класс строки лучше всего использовать для работы в C++ со строками Unicode? Может есть какой-нибудь общий, эффективный подход?

Думал в сторону wstring, но заглянув в Википедию, прочитал следующее:
В Windows API тип wchar_t именуется как WCHAR и имеет фиксированный размер 16 бит, что не позволяет кодировать весь набор символов Unicode (больше 1 миллиона).


После этого задумался, как же это реализовано в QString:
QString хранит строку 16-битных QChar, где каждому QChar соответствует один символ Unicode 4.0. (Символы Unicode со значениями кодов больше 65535 хранятся с использованием суррогатных пар, т.е. двух последовательных QChar.)


Пишу не на Qt... Как быть?
  • Вопрос задан
  • 3420 просмотров
Пригласить эксперта
Ответы на вопрос 5
donkaban
@donkaban
Умею рисовать тени
utfcpp.sourceforge.net

Можно немного ненависти? Спасибо.
Вопрос "какие есть библиотеки для XXX в языке YYY " - создан для поисковых систем. Ну почему вы не пробуете задать этот вопрос не живым людям на тостере (или, в особо тяжелых случаях - сразу на SO ), а бездушным роботам на яндексах, гуглах и даже (не дай бог, конечно) богопротивных бингах всяких?
Нет, ну сами подумайте, сплошные же плюсы - никто не нудит, ответ (тысячи ответов!) - мгновенен, и в резюме можно указать такой редкий сегодня скил - "умею искать в гугле". Сплошной профит.
Ответ написан
IlyaEvseev
@IlyaEvseev
Opensource geek
В Windows API тип wchar_t именуется как WCHAR и имеет фиксированный размер 16 бит, что не позволяет кодировать весь набор символов Unicode (больше 1 миллиона).

1) Это проблема Windows, а не проблема приложения. Решать ее в приложении = городить костыли.

2) Все основные символы в UTF-16 поместились. Не будет большой беды, если приложение не сможет работать с какими-нибудь древнекитайскими иероглифами.

Лучше всего использовать стандартные классы и не париться.
Ответ написан
Уникод можно кодировать даже с char, используя UTF8.
Ответ написан
@sitev_ru Автор вопроса
sitev.ru - мой блог ...
char *s;
s = utf8_to_char("Привет, мир!"); //присвою в s строку "Привет, мир!" в формате utf-8


Теперь хочу взять 3-ий символ, то есть букву "и", но, ествественно, s[2] выдаст другой результат... хотя в кодировке windows-1251 выдало бы букву "и"...
Ответ написан
AxisPod
@AxisPod
Берите libicu если вам нужны богатые возможности по работе с UTF.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы