将执行字符集字符串转换为UTF-8字符串

时间:2018-06-26 11:10:00

标签: c++ utf-8 character-encoding

在我的程序中,我有一个std::string,其中包含使用“执行字符集”(即not guaranteed to be UTF-8 or even US-ASCII)编码的文本,我想将其转换为包含以下内容的std::string:相同的文本,但使用UTF-8编码。我该怎么办?

我想我需要一个std::codecvt<char, char, std::mbstate_t>字符转换对象,但是在哪里可以找到合适的对象?我必须使用什么函数或构造函数?

我认为标准库提供了某种方式(某种方式),因为编译器本身必须了解UTF-8(以支持UTF-8字符串文字)和执行字符集。

2 个答案:

答案 0 :(得分:0)

  

我想我需要一个std::codecvt<char, char, std::mbstate_t>字符转换对象,但是在哪里可以找到合适的对象?

由于析构函数受到保护,因此只能将std::codecvt对象作为基类实例(通过从其继承)获得。也就是说,std::codecvt<char, char, std::mbstate_t>不是您需要的方面,因为它表示身份转换(即完全没有转换)。

目前,C ++标准库没有用于在本地(又名执行)字符编码(又名字符集)和UTF-8之间转换的功能。这样,您可以使用Unicode标准自己实现转换:https://www.unicode.org/versions/Unicode11.0.0/UnicodeStandard-11.0.pdf

  

要使用外部库,我想您需要知道执行字符集的“名称”(或ID)。但是你怎么得到的呢?

也没有标准库函数。例如,在POSIX系统上,您可以使用nl_langinfo(CODESET)

答案 1 :(得分:0)

这很棘手,但它在 MS VS2019 中对我有用

#pragma execution_character_set( "utf-8" )