Какова наилучшая практика обработки Unicode в C ++?
107
is_alpha
если это не то определение, которое вам нужно.string
если вы заботитесь о правильности, всегда используйте для этого свою библиотеку unicode.
string
двоичные данные.Если вас не волнует обратная совместимость с предыдущими стандартами C ++, текущий стандарт C ++ 11 имеет встроенную поддержку Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Таким образом, по-настоящему лучшей практикой для обработки Unicode в C ++ было бы использование для этого встроенных средств. Однако это не всегда возможно со старыми базами кода, поскольку в настоящее время стандарт настолько новый.
РЕДАКТИРОВАТЬ: Чтобы уточнить, C ++ 11 поддерживает Unicode, поскольку теперь он поддерживает литералы Unicode и строки Unicode. Однако стандартная библиотека имеет лишь ограниченную поддержку обработки и преобразования Unicode. Для ваших текущих нужд этого может быть достаточно. Однако, если вам нужно выполнить большой объем тяжелой работы прямо сейчас, вам все равно может потребоваться что-то вроде ICU для более глубокой обработки. В настоящее время в разработке есть несколько предложений по включению более надежной поддержки преобразования текста между различными кодировками. Я предполагаю (и надеюсь), что это будет частью следующего технического отчета .
источник
Наша компания (и другие) используют библиотеку Internation Components for Unicode (ICU) с открытым исходным кодом, изначально разработанную Taligent.
Он обрабатывает строки, локали, преобразования, дату / время, сопоставление, преобразования и т. Д. al.
Начните с Руководства пользователя ICU
источник
Вот контрольный список для программирования Windows:
источник
Посмотрите на сравнение строк без учета регистра в C ++
В этом вопросе есть ссылка на документацию Microsoft по Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Если вы посмотрите на левую навигационную часть MSDN рядом с этой статьей, вы должны найти много информации, относящейся к функциям Unicode. Это часть главы «Кодирование символов» ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Он состоит из следующих подразделов:
источник
Хотя это может быть не лучшим решением для всех, вы можете написать свои собственные процедуры C ++ UNICODE, если хотите!
Я только что закончил делать это на выходных. Я многому научился, хотя я не гарантирую, что он на 100% свободен от ошибок, я провел много тестов, и, похоже, он работает правильно.
Мой код находится под новой лицензией BSD, и его можно найти здесь:
http://code.google.com/p/netwidecc/downloads/list
Он называется WSUCONV и поставляется с образцом программы main (), которая выполняет преобразование между UTF-8, UTF-16 и стандартным ASCII. Если выбросить основной код, у вас есть хорошая библиотека для чтения / записи UNICODE.
источник
Как было сказано выше, библиотека - лучший выбор при использовании большой системы. Однако иногда вы действительно хотите справиться с вещами самостоятельно (возможно, потому, что библиотека будет использовать многие ресурсы, например, на микроконтроллере). В этом случае вам нужна простая библиотека, из которой вы можете копировать части для вещей, которые вам действительно нужны.
Пример кода Уиллоу Шлангер кажется хорошим (подробнее см. Его ответ).
Я также нашел еще один, который имеет меньший код, но не имеет полной проверки ошибок и обрабатывает только UTF-8, но из него проще извлекать части.
Вот список встроенных библиотек, которые кажутся достойными.
Встроенные библиотеки
источник
Используйте международные компоненты IBM для Unicode
источник
Взгляните на рекомендации UTF-8 Everywhere
источник