Какие новые функции Unicode находятся там в C++ 0x?

Было упомянуто в нескольких источниках, что C++ 0x будет включать лучшую поддержку уровня языка Unicode (включая типы и литералы).

Если язык собирается добавить эти новые опции, только естественно предположить, что стандартная библиотека будет также. Однако я в настоящее время не могу найти любые ссылки на новую стандартную библиотеку. Я ожидал узнавать ответ для этих ответов:

  1. Новая библиотека обеспечивает стандартные методы преобразовать UTF-8 в UTF-16 и т.д.?
  2. Делает новую библиотеку, позволяющую записи UTF-8 файлам, консоли (или из файлов, из консоли). Если так, мы можем использовать суд, или нам будет нужно что-то еще?
  3. Делает новую библиотеку, включают "основную" функциональность, такую как: обнаружение количества байта и длины строки UTF-8, преобразовывая в верхний регистр/нижний регистр (это рассматривает влияние локалей?)

Наконец, какая-либо из этих функций, доступны в каких-либо популярных компиляторах, таких как GCC или Visual Studio?

Я попытался искать информацию, но я, может казаться, ничего не нахожу. Я на самом деле начинаю думать, что, возможно, эти вещи еще даже не решены (я знаю, что C++ 0x является происходящей работой).

19
задан luiscubal 17 May 2010 в 23:00
поделиться

1 ответ

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

Если вам нужны такие вещи, вам все равно придется полагаться на внешнюю библиотеку - является основной частью, которая была модернизирована.

Что, конкретно, добавлено для юникода в новом стандарте?

  • Литералы юникода, через u8"", u"" и U""
  • std:: char_traits классы для UTF-8, UTF-16 и UTF-32
  • mbrtoc16, c16rtomb, mbrtoc32 и c32rtomb из ISO/IEC TR 19769:2004
  • std:: codecvt для библиотеки локалей
  • Шаблон класса std::wstring_convert (который использует механизм codecvt для преобразований кодовых наборов)
  • Шаблон класса std::wbuffer_convert, который делает то же самое, что и wstring_convert, за исключением необработанных массивов, а не строк.
13
ответ дан 30 November 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: