Подтвердить что ты не робот

Какие новые функции Unicode существуют в С++ 0x?

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

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

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

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

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

4b9b3361

Ответ 1

Предоставляет ли новая библиотека стандартные методы для преобразования UTF-8 в UTF-16 и т.д.?
Нет. Новая библиотека предоставляет std::codecvt грани, которые делают преобразование для вас при работе с iostream. ISO/IEC TR 19769: 2004, технический отчет C Unicode, включен почти в стенограмму в новом стандарте.

Предоставляет ли новая библиотека возможность записи UTF-8 в файлы, на консоль (или из файлов, из консоли). Если да, можем ли мы использовать cout или нам нужно что-то еще?
Да, вы просто наполните cout правильной гранью codecvt. Обратите внимание, однако, что консоль не требуется правильно отображать эти символы.

Входит ли в новую библиотеку "базовые" функциональные возможности, такие как: открытие байта и длина строки UTF-8, преобразование в верхний регистр/нижний регистр (учитывает ли это влияние локалей?)
AFAIK, что функциональность существует с существующим стандартом С++ 03. std::toupper и std::towupper, конечно, как и в предыдущих версиях стандарта. Нет никаких новых функций, которые специально работают для unicode для этого.

Если вам нужны такие вещи, вам все равно придется полагаться на внешнюю библиотеку. <iostream> - это основная часть, которая была модифицирована.

Что, специально, добавлено для unicode в новом стандарте?

  • Unicode литералы через 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, за исключением необработанных массивов, а не строк.