Обработка юникода в C++



какова лучшая практика обработки Юникода в C++?

913   9  

9 ответов:

  • использовать ICU для работы с вашими данными (или аналогичных библиотек)
  • в своем хранилище данных, убедитесь, что все хранится в той же кодировке
  • убедитесь, что вы всегда используете свою библиотеку unicode для повседневных задач, таких как длина строки, Статус капитализации и т. д. Никогда не используйте стандартные встроенные библиотеки, такие как is_alpha Если это не то определение, которое вы хотите.
  • Я не могу сказать, что этого достаточно: никогда не перебирайте индексы а string Если вы заботитесь о правильности, всегда используйте для этого свою библиотеку unicode.

Если вы не заботитесь о обратной совместимости с предыдущими стандартами 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 для более глубокой обработки. Есть несколько предложений в настоящее время работает для включения более надежной поддержки для преобразования текста между различными кодировками. Я думаю (и надеюсь), что это будет частью следующего технический отчет.

наша компания (и другие) используют открытый исходный код международные компоненты для Unicode (ICU) библиотека первоначально разработанная Taligent.

он обрабатывает строки, локали, преобразования, дату / время, параметры сортировки, преобразования и т. д. Эл.

с ICU Userguide

вот контрольный список для программирования Windows:

  • все строки, заключенные в _T ("моя строка")
  • strlen () etc. функции заменяется _tcslen() и т. д.
  • используйте LPTSTR и LPCTSTR вместо char * и const char*
  • при запуске новых проектов в dev Studio, религиозно убедитесь, что параметр Unicode выбран в свойствах проекта.
  • для строк C++ используйте std:: wstring вместо std:: string

посмотреть сравнение строк без учета регистра в C++

этот вопрос имеет ссылку на документацию Microsoft по Unicode:http://msdn.microsoft.com/en-us/library/cc194799.aspx

Если вы посмотрите на левой стороне навигации на MSDN рядом с этой статьей, Вы должны найти много информации, относящейся к функциям Unicode. Это часть главы " кодирование символов" (http://msdn.microsoft.com/en-us/library/cc194786.aspx)

Он имеет следующие подразделы:

  • Модель Кодовой Страницы
  • двухбайтовые наборы символов в Windows
  • Unicode
  • проблемы совместимости в смешанных средах
  • Преобразование Данных Юникода
  • миграция Windows-программ в Unicode
  • резюме

хотя это может быть не лучшая практика для всех, вы можете написать свои собственные процедуры C++ UNICODE, если хотите!

Я только что закончил делать это на выходных. Я многому научился, хотя я не гарантирую, что это 100% ошибка бесплатно, я сделал много тестов, и это, кажется, работает правильно.

мой код под новой лицензией BSD и может быть найден здесь:

http://code.google.com/p/netwidecc/downloads/list

Это называется WSUCONV и поставляется с образцом программы main (), которая преобразует между UTF-8, UTF-16 и стандартным ASCII. Если вы выбросите основной код, у вас есть хорошая библиотека для чтения / записи UNICODE.

Как было сказано выше библиотека является лучшим выбором при использовании большой системы. Однако иногда вы хотите обрабатывать вещи самостоятельно (возможно, потому, что библиотека будет использовать многие ресурсы, такие как микроконтроллер). В этом случае вам нужна простая библиотека, из которой вы можете скопировать детали для вещей, которые вам действительно нужны.

пример кода Willow Schlanger кажется хорошим (см. Его ответ для более подробной информации).

Я также нашел еще один, который меньший код, но не хватает полной проверки ошибок и только обрабатывает UTF-8, но было проще вынимать части.

вот список встроенных библиотек, которые выглядят прилично.

встроенные библиотеки

взгляните на рекомендации UTF-8 везде

Comments

    Ничего не найдено.