如何使用C ++将UTF-16转换为UTF-8?

时间:2018-12-14 14:48:06

标签: c++ string utf-8 utf-16 wstring

  • 我已经认识'codecvt','WideCharToMultiByte'和其他人。

我使用韩语。例如。 “안녕하세요”。

该消息可以插入普通的字符串类。对吧?

但就我而言。如果我有文件::'test.txt'{in ::'안녕하세요'}

然后阅读'test.txt'和getline(),

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

现在我使用cout。塔达!信息已损坏!

我知道这是WideCharacter问题。所以我尝试了MultiByteToWideChar方法。

好的。很好。

但是我不想要这个。

最后,我想读取Widecharcter文件,并保存“字符串”变量。

所以,我要问你。

当“不更改消息”时如何将UTF-16(宽字符/ wstring)转换为UTF-8(多字节/字符串)?

::我想要这种风格

wstring temp =“안녕하세요”

string temp2 = convert_to_string(temp);

->

字符串temp2 =“안녕하세요”

1 个答案:

答案 0 :(得分:2)

如评论中所述,您可以在Convert C++ std::string to UTF-16-LE encoded string中找到有关如何进行转换的代码。

但是假设您拥有wstring来保存韩文字符串,就避免了区分UTF-16-LE和UTF-16-BE的麻烦,并且可以轻松找到每个韩文字符的Unicode代码点在字符串中。因此,您的问题归结为找到任何代码点的UTF-8表示形式。并不难,请参阅https://tools.ietf.org/html/rfc3629(也是Wikipedia https://en.wikipedia.org/wiki/UTF-8)的第3页。

其中包含示例代码 Convert Unicode code points to UTF-8 and UTF-32