Что вы подразумеваете под "портативным wchar_t"? Существует тип uint16_t
шириной 16 бит, который часто доступен. Но это, конечно, еще не составляет строку. Строка должна знать о своей кодировке, чтобы иметь смысл таких функций, как length()
, substring()
и т. Д. (Поэтому она не обрезает символы в середине кодовой точки при использовании utf8 или 16). Я знаю несколько строковых классов, совместимых с юникодом, которые вы можете использовать. Все они могут быть использованы в коммерческих программах бесплатно (Qt one будет совместим с коммерческими программами бесплатно через пару месяцев, когда выйдет Qt 4.5).
ustring
из проекта gtkmm
. Если вы программируете с помощью gtkmm или используете glibmm, это должно быть первым выбором, он использует utf-8
для внутреннего использования. Qt
также имеет строковый класс, называемый QString. Это закодировано в utf-16
. ICU
- это еще один проект, который создает переносимые классы строковых юникодов и имеет класс UnicodeString
, который, кажется, внутренне закодирован в utf-16, как Qt. Хотя я этим не пользовался.