Различия в кодировках символов. Интернационализация специальных символов

   
На этом шаге мы рассмотрим способы интернационализации специальных символов.

   
При рассказе об интернационализации остался без ответа один важный вопрос: как интернационализируются специальные символы (например, символ
\n)? Класс basic_ios содержит функции widen() и narrow(), которые могут использоваться для этой цели. Например,
символ новой строки в кодировке, соответствующей формату потока данных strm, может записываться следующим об-разом:

strm.widen('\n');   // Интернационализированный символ новой строки

   
Символ конца строки в этой же кодировке выглядит так:

strm.widen('\0');   // Интернационализированный завершитель строк

   
За примером обращайтесь к реализации манипулятора endl на 482 шаге.

   
Функции widen() и narrow() используют объект локального контекста, а говоря точнее - фацет ctype этого объекта.
Фацет может потребоваться для преобразования символов между char и другим представлением. Например, следующее выражение
преобразует символ с типа char в объект типа char_type с использованием объекта локального контекста loc:

std::use_facet<std::ctype<char_type> >(loc).widen(c)

   Замечание.
Обратите внимание на пробел между символами >. Последовательность > воспринимается компилятором как оператор сдвига, что приводит к
синтаксической ошибке.

   
Подробности работы с локальными контекстами и их фацетами будут представлены в следующих шагах.

   
На следующем шаге мы рассмотрим концепцию локального контекста.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий