std::codecvt_utf8
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <codecvt>
|
||
template< class Elem, unsigned long Maxcode = 0x10ffff, std::codecvt_mode Mode = (std::codecvt_mode)0 > class codecvt_utf8 : public std::codecvt<Elem, char, std::mbstate_t>; |
||
std::codecvt_utf8 является std::codecvt аспект, который инкапсулирует преобразования между UTF-8 строку в кодировке байт и UCS2 или UCS4 строку символов (в зависимости от типа
Elem). Это codecvt аспект может быть использован для чтения и записи UTF-8 файлов, как текстовых, так и двоичных. Оригинал:
std::codecvt_utf8 is a std::codecvt facet which encapsulates conversion between a UTF-8 encoded byte string and UCS2 or UCS4 character string (depending on the type of
Elem). This codecvt facet can be used to read and write UTF-8 files, both text and binary. Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры шаблона
| Elem | — | либо
char16_t, char32_t, или wchar_t Оригинал: either char16_t, char32_t, or wchar_t Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| Maxcode | — | Наибольшее значение
Elem, что данный аспект будет читать и писать без ошибок Оригинал: the largest value of Elem that this facet will read or write without error Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
| Mode | — | константа типа std::codecvt_mode
Оригинал: a constant of type std::codecvt_mode Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Унаследован от std::codecvt
Member types
| Тип члена | Определение |
intern_type
|
internT
|
extern_type
|
externT
|
state_type
|
stateT
|
Member objects
Имя пользователя
Оригинал: Member name Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Type |
id (статическим)
|
std::locale::id |
Member functions
Вызывает do_out Оригинал: invokes do_out Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_in Оригинал: invokes do_in Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_unshift Оригинал: invokes do_unshift Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_encoding Оригинал: invokes do_encoding Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_always_noconv Оригинал: invokes do_always_noconv Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_length Оригинал: invokes do_length Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
| |
Вызывает do_max_length Оригинал: invokes do_max_length Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (public функция-элемент std::codecvt)
|
Protected member functions
[virtual] |
преобразует строку из internT в externT, например, при записи в файл Оригинал: converts a string from internT to externT, such as when writing to file Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
преобразует строку из externT в internT, например, при чтении из файла Оригинал: converts a string from externT to internT, such as when reading from file Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
генерирует последовательность прекращения характер externT символов для неполного преобразования Оригинал: generates the termination character sequence of externT characters for incomplete conversion Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
возвращает количество externT символы, необходимые для производства одной internT характер, если постоянная Оригинал: returns the number of externT characters necessary to produce one internT character, if constant Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
Тесты, если грань кодирует тождественное преобразование для всех допустимых значений аргумента Оригинал: tests if the facet encodes an identity conversion for all valid argument values Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
вычисляет длину externT строку, которая будет потребляться преобразования в данной internT буфера Оригинал: calculates the length of the externT string that would be consumed by conversion into given internT buffer Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
[virtual] |
возвращает максимальное число externT символы, которые могут быть преобразованы в единый internT характер Оригинал: returns the maximum number of externT characters that could be converted into a single internT character Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. (virtual protected std::codecvt функция-элемент)
|
Унаследован от std::codecvt_base
| Тип члена | Определение |
enum result { ok, partial, error, noconv };
|
Незаданной типа перечисления
Оригинал: Unscoped enumeration type Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Перечисление постоянно
Оригинал: Enumeration constant Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Definition |
ok
|
Преобразование была завершена без ошибок
Оригинал: conversion was completed with no error Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
partial
|
Не все символы источником были преобразованы
Оригинал: not all source characters were converted Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
error
|
встречается недопустимый символ
Оригинал: encountered an invalid character Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
noconv
|
преобразование не требуется, вход и выход типов одинаковы
Оригинал: no conversion required, input and output types are the same Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
Пример
В следующем примере показана разница между UCS2/UTF-8 и UTF-16/UTF-8 преобразований: третий символ в строке не является допустимым символом UCS2 .
Оригинал:
The following example demonstrates the difference between UCS2/UTF-8 and UTF-16/UTF-8 conversions: the third character in the string is not a valid UCS2 character.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Запустить этот код
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>
int main()
{
// UTF-8 data. The character U+1d10b, musical sign segno, does not fit in UCS2
std::string utf8 = u8"z\u6c34\U0001d10b";
// the UTF-8 / UTF-16 standard conversion facet
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> utf16conv;
std::u16string utf16 = utf16conv.from_bytes(utf8);
std::cout << "UTF16 conversion produced " << utf16.size() << " code points:\n";
for(char16_t c : utf16)
std::cout << std::hex << std::showbase << c << '\n';
// the UTF-8 / UCS2 standard conversion facet
std::wstring_convert<std::codecvt_utf8<char16_t>, char16_t> ucs2conv;
try {
std::u16string ucs2 = ucs2conv.from_bytes(utf8);
} catch(const std::range_error& e) {
std::u16string ucs2 = ucs2conv.from_bytes(utf8.substr(0, ucs2conv.converted()));
std::cout << "UCS2 failed after producing " << std::dec << ucs2.size()<<" characters:\n";
for(char16_t c : ucs2)
std::cout << std::hex << std::showbase << c << '\n';
}
}
Вывод:
UTF16 conversion produced 4 code points:
0x7a
0x6c34
0xd834
0xdd0b
UCS2 failed after producing 2 characters:
0x7a
0x6c34
См. также
| Character conversions |
narrow multibyte (char) |
UTF-8 (char) |
UTF-16 (char16_t) |
|---|---|---|---|
| UTF-16 | mbrtoc16 / c16rtomb | codecvt<char16_t, char, mbstate_t> codecvt_utf8_utf16<char16_t> codecvt_utf8_utf16<char32_t> codecvt_utf8_utf16<wchar_t> |
Н/Д |
| UCS2 | Нет | codecvt_utf8<char16_t> | codecvt_utf16<char16_t> |
| UTF-32/UCS4 (char32_t) |
mbrtoc32 / c32rtomb | codecvt<char32_t, char, mbstate_t> codecvt_utf8<char32_t> |
codecvt_utf16<char32_t> |
| UCS2/UCS4 (wchar_t) |
Нет | codecvt_utf8<wchar_t> | codecvt_utf16<wchar_t> |
| wide (wchar_t) |
codecvt<wchar_t, char, mbstate_t> mbsrtowcs / wcsrtombs |
Нет | Нет |
| конвертирует между кодировками символов, включая UTF-8, UTF-16, UTF-32 (шаблон класса) | |
(C++11)(устарело в C++17) |
теги для изменения поведения стандартных фасетов codecvt (перечисление) |
(C++11)(устарело в C++17) |
конвертирует между UTF-16 и UCS-2/UCS-4 (шаблон класса) |
(C++11)(устарело в C++17) |
конвертирует между UTF-8 и UTF-16 (шаблон класса) |