在我的程序中,我有一个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字符串文字)和执行字符集。
答案 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" )