Boost.Locale - строка Unicode в C++
Могу ли я сделать так, чтобы все std:: string в моем приложении поддерживали Unicode с Boost.Locale? После прочтения документации могу сказать да. Но я не понимаю, как это работает. Главный вопрос: могу ли я по-прежнему использовать библиотеку алгоритмов ускорения строк или библиотеки Boost.Lexical_Cast? Если да, то почему мне нужны boost::locale::to_upper и аналогичные методы форматирования, если у меня есть эти методы в библиотеке алгоритмов boost string.
1 ответ
Да, вы можете сделать все строки в вашем приложении Unicode с кодировкой Boost.Locale.
Чтобы это работало, вы вставляете языковой стандарт в строку или устанавливаете глобальный языковой стандарт по умолчанию на свой новый языковой стандарт на основе юникода (сгенерированный Boost.Locale). Смотрите здесь, чтобы узнать, как это сделать: http://www.boost.org/libs/locale/doc/html/locale_gen.html и http://www.boost.org/libs/locale/doc/html/faq.html
API-интерфейсы для работы со строками в Boost.Locale отличаются от тех, которые представлены в библиотеке алгоритма строковых алгоритмов. Узнайте, почему функции Boost.Locale лучше: http://www.boost.org/libs/locale/doc/html/conversions.html
Вы все еще можете использовать boost::lexical_cast, при условии, что вы правильно задали глобальную локаль (поскольку, если я правильно помню, вы не можете явно передать объект локали в Boost.LexicalCast).
Имейте в виду, однако, что это "сломает" некоторые случаи, например, при преобразовании целого числа в строку вместо использования языкового стандарта C (как, вероятно, было вашим предыдущим значением по умолчанию), он будет использовать другой, который может вставлять разделители и т. д. При выполнении преобразований, которые НЕ отображаются пользователю, вы можете использовать std::stringstream et al., чтобы избежать нежелательных изменений форматирования.
Я настоятельно рекомендую вам полностью прочитать документацию Boost.Locale, так как она должна решить большинство ваших проблем (особенно часто задаваемые вопросы, информацию о бэкенде генерации и т. Д.).