Было упомянуто в нескольких источниках, что C++ 0x будет включать лучшую поддержку уровня языка Unicode (включая типы и литералы).
Если язык собирается добавить эти новые опции, только естественно предположить, что стандартная библиотека будет также. Однако я в настоящее время не могу найти любые ссылки на новую стандартную библиотеку. Я ожидал узнавать ответ для этих ответов:
Наконец, какая-либо из этих функций, доступны в каких-либо популярных компиляторах, таких как GCC или Visual Studio?
Я попытался искать информацию, но я, может казаться, ничего не нахожу. Я на самом деле начинаю думать, что, возможно, эти вещи еще даже не решены (я знаю, что C++ 0x является происходящей работой).
Предоставляет ли новая библиотека стандартные методы для преобразования UTF-8 в UTF-16 и т.д.?
Нет. Новая библиотека предоставляет std::codecvt
фасеты, которые делают преобразование за вас при работе с iostream, однако. ISO/IEC TR 19769:2004, технический отчет C Unicode, включен в новый стандарт почти дословно.
Позволяет ли новая библиотека записывать UTF-8 в файлы, в консоль (или из файлов, из консоли). Если да, то можем ли мы использовать cout или нам понадобится что-то другое?
Да, вы просто наделите cout правильным codecvt
фасетом. Заметьте, однако, что консоль не обязана правильно отображать эти символы
Включает ли новая библиотека "базовую" функциональность, такую как: определение количества байт и длины строки UTF-8, преобразование в верхний/нижний регистр (учитывает ли это влияние локалей?)
AFAIK эта функциональность существует в существующем стандарте C++03. std::toupper
и std::towupper
, конечно, функционируют так же, как и в предыдущих версиях стандарта. Никаких новых функций, специально оперирующих с юникодом, для этого не предусмотрено.
Если вам нужны такие вещи, вам все равно придется полагаться на внешнюю библиотеку -
является основной частью, которая была модернизирована.
Что, конкретно, добавлено для юникода в новом стандарте?
std:: char_traits
классы для UTF-8, UTF-16 и UTF-32mbrtoc16
, c16rtomb
, mbrtoc32
и c32rtomb
из ISO/IEC TR 19769:2004std:: codecvt
для библиотеки локалейstd::wstring_convert
(который использует механизм codecvt
для преобразований кодовых наборов)std::wbuffer_convert
, который делает то же самое, что и wstring_convert
, за исключением необработанных массивов, а не строк.