std:: text_encoding
|
Определено в заголовочном файле
<text_encoding>
|
||
|
struct
text_encoding
;
|
(начиная с C++26) | |
Класс
text_encoding
предоставляет механизм для идентификации кодировок символов. Он используется для определения
кодировки обычных символьных литералов
среды трансляции на этапе компиляции и кодировки символов среды выполнения во время исполнения программы.
Каждый
text_encoding
объект инкапсулирует
схему кодировки символов
, однозначно идентифицируемую перечислителем в
text_encoding::id
и соответствующим именем, представленным нуль-терминированной строкой байтов. Доступ к ним можно получить через функции-члены
mib()
и
name()
соответственно. Определение того, представляет ли объект схему кодировки символов, реализованную в среде трансляции или выполнения, определяется реализацией.
Класс
text_encoding
является
TriviallyCopyable
типом. Объект массива, представляющий соответствующее название схемы кодировки символов,
размещается внутри
самого объекта
text_encoding
. Сохраняемое название ограничено максимум
max_name_length
символами, исключая нулевой символ
'
\0
'
.
Класс поддерживает как зарегистрированные, так и незарегистрированные кодировки символов. Зарегистрированные кодировки — это те, которые находятся в реестре кодировок символов IANA за исключением следующих кодировок символов:
- NATS-DANO (33)
- NATS-DANO-ADD (34).
Кроме того, класс предоставляет доступ для зарегистрированных кодировок символов к:
- Основное название : Официальное название, указанное в реестре.
- Псевдонимы : Определяемое реализацией надмножество псевдонимов из реестра.
- Значение MIBenum : Уникальный идентификатор для использования при распознавании кодировок символов.
Незарегистрированные кодировки могут быть представлены с помощью перечислителя id :: other или id :: unknown и пользовательского названия.
Объект
text_encoding
e
, чье значение MIBenum не является ни
id
::
other
, ни
id
::
unknown
, поддерживает следующие инварианты:
- * e. name ( ) ! = ' \0 ' истинно, и
- e. mib ( ) == std:: text_encoding ( e. name ( ) ) . mib ( ) истинно.
Содержание |
Типы членов
|
представляет значение MIBenum кодировки символов
(публичный член перечисления) |
|
view
над псевдонимами кодировки символов
(публичный класс-член) |
Константа-член
| Название | Значение |
|
constexpr
std::
size_t
max_name_length
[static]
|
63
(публичная статическая константа-член) |
Члены данных
| Участник | Описание |
std
::
text_encoding
::
id
mib_
(приватный)
|
значение MIBenum с
id
::
unknown
в качестве значения по умолчанию
( объект-участник только для демонстрации* ) |
char
[
max_name_length
+
1
]
name_
(приватный)
|
сохранённое основное имя
( объект-участник только для демонстрации* ) |
Функции-члены
Создание |
|
создает новый объект
text_encoding
(public member function) |
|
|
[static]
|
создает новый
text_encoding
представляющий
кодировку обычных символьных литералов
(public static member function) |
|
[static]
|
создает новый
text_encoding
представляющий определенную реализацией схему кодировки символов среды выполнения
(public static member function) |
Наблюдатели |
|
|
возвращает значение MIBenum текущей кодировки символов
(public member function) |
|
|
возвращает основное имя текущей кодировки символов
(public member function) |
|
возвращает
view
над псевдонимами текущей кодировки символов
(public member function) |
|
|
[static]
|
проверяет схему кодировки символов среды выполнения с указанным значением MIB
(public static member function) |
Вспомогательные функции |
|
|
[static]
(private)
|
сравнивает два имени псевдонима используя
Charset Alias Matching
( exposition-only static member function* ) |
Функции, не являющиеся членами класса
|
(C++26)
|
сравнивает два
text_encoding
объекта.
(публичная функция-член) |
Вспомогательные классы
|
(C++26)
|
поддержка хеширования для
std::text_encoding
(специализация шаблона класса) |
Примечания
При работе с кодировками символов важно отметить, что основные названия или псевдонимы двух различных зарегистрированных кодировок символов не являются эквивалентными при сравнении с использованием Charset Alias Matching , как описано в Техническом стандарте Юникода.
Для удобства перечислители
text_encoding::id
представлены как члены класса
text_encoding
и могут быть доступны напрямую. Это означает, что
text_encoding
::
ASCII
и
text_encoding
::
id
::
ASCII
ссылаются на одну и ту же сущность.
Рекомендуется, чтобы реализация рассматривала зарегистрированные кодировки как не взаимозаменяемые. Кроме того, основное название зарегистрированной кодировки не должно использоваться для описания похожей, но отличающейся незарегистрированной кодировки, если нет явного прецедента для этого.
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_text_encoding
|
202306L
|
(C++26) |
std::text_encoding
|
Пример
#include <locale> #include <print> #include <text_encoding> int main() { // кодировка литералов известна на этапе компиляции constexpr std::text_encoding literal_encoding = std::text_encoding::literal(); // проверка кодировки литералов static_assert(literal_encoding.mib() != std::text_encoding::other && literal_encoding.mib() != std::text_encoding::unknown); // кодировка окружения известна только во время выполнения std::text_encoding env_encoding = std::text_encoding::environment(); // ассоциированная кодировка локали по умолчанию std::text_encoding locale_encoding = std::locale("").encoding(); std::println("The literal encoding is {}", literal_encoding.name()); std::println("The aliases of literal encoding:"); for (const char* alias_name : literal_encoding.aliases()) std::println(" -> {}", alias_name); if (env_encoding == locale_encoding) std::println("Both environment and locale encodings are the same"); std::println("The environment encoding is {}", env_encoding.name()); std::println("The aliases of environment encoding:"); for (const char* alias_name : env_encoding.aliases()) std::println(" -> {}", alias_name); }
Возможный вывод:
The literal encoding is UTF-8 The aliases of literal encoding: -> UTF-8 -> csUTF8 Both environment and locale encodings are the same The environment encoding is ANSI_X3.4-1968 The aliases of environment encoding: -> US-ASCII -> iso-ir-6 -> ANSI_X3.4-1968 -> ANSI_X3.4-1986 -> ISO_646.irv:1991 -> ISO646-US -> us -> IBM367 -> cp367 -> csASCII -> ASCII
Смотрите также
|
набор полиморфных фасадов, инкапсулирующих культурные различия
(класс) |