Как преобразовать UTF-16 в UTF-8 с помощью С++?

  • Я уже знаю 'codecvt', 'WideCharToMultiByte' и еще кого-то.

Я использую корейский язык. Например. '안녕하세요'.

Это сообщение может вставлять обычный строковый класс. Правильно?

Но в моем случае. Если у меня есть файл :: 'test.txt' {in :: '안녕하세요'}

И прочитайте 'test.txt' и getline(),

(test.txt file read)
string temp;
getline(file pointer, temp);
cout<<temp;

Теперь я использую cout. Та-Да! сообщение сломано!

Я знаю, что это проблема WideCharacter. поэтому я использую метод MultiByteToWideChar.

В порядке. Это хорошо работает.

Но я не хочу этого.

Наконец, я хочу читать файлы с широкими символами и сохранять переменную «строка».

Итак, я задаю вам вопрос.

Как преобразовать UTF-16 (широкий символ/wstring) в UTF-8 (многобайтовый/строка), когда «Не изменять сообщение»?

:: Я хочу этот стиль

wstring temp = "안녕하세요"

строка temp2 = convert_to_string(temp);

->

string temp2 = "안녕하세요"


person LocketGoma    schedule 14.12.2018    source источник
comment
Не совсем дубликат, но этот ответ может быть тем, что вы хотите? stackoverflow.com/questions/52703630/   -  person Galik    schedule 14.12.2018


Ответы (1)


Как упоминалось в комментарии, вы можете увидеть C++ std::string в строку в кодировке UTF-16-LE для кода о том, как выполнить преобразование.

Но если вы предположили, что у вас есть wstring для хранения корейской строки, вы избежали проблем с различением UTF-16-LE и UTF-16-BE, и вы можете легко найти кодовую точку Unicode для каждого корейского символа в строке. Таким образом, ваша проблема сводится к поиску представления UTF-8 любой кодовой точки. Это нетрудно, см. страницу 3 https://tools.ietf.org/html/rfc3629 (также Википедия https://en.wikipedia.org/wiki/UTF-8< /а>).

Пример кода находится в Преобразование кодовых точек Unicode на UTF-8 и UTF-32

person adrtam    schedule 14.12.2018