Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将执行字符集字符串转换为UTF-8字符串_C++_Utf 8_Character Encoding - Fatal编程技术网

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

C++ 将执行字符集字符串转换为UTF-8字符串,c++,utf-8,character-encoding,C++,Utf 8,Character Encoding,在我的程序中,我有一个std::string,其中包含使用“执行字符集”(即)编码的文本,我想将其转换为一个std::string,它包含相同的文本,但使用UTF-8编码。我该怎么做 我想我需要一个std::codevtcharacterconverter对象,但是在哪里可以找到合适的对象呢?我必须使用什么函数或构造函数 我假设标准库提供了一些实现这一点的方法(在某些地方,某种程度上),因为编译器本身必须了解UTF-8(以支持UTF-8字符串文本)和执行字符集 我想我需要一个std::codev

在我的程序中,我有一个
std::string
,其中包含使用“执行字符集”(即)编码的文本,我想将其转换为一个
std::string
,它包含相同的文本,但使用UTF-8编码。我该怎么做

我想我需要一个
std::codevt
characterconverter对象,但是在哪里可以找到合适的对象呢?我必须使用什么函数或构造函数

我假设标准库提供了一些实现这一点的方法(在某些地方,某种程度上),因为编译器本身必须了解UTF-8(以支持UTF-8字符串文本)和执行字符集

我想我需要一个
std::codevt
characterconverter对象,但是在哪里可以找到合适的对象呢

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

目前,C++标准库没有用于在原生字符编码(AKA字符集)和UTF-8之间进行转换的功能。因此,您可以使用Unicode标准自己实现转换:

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


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

这是一种很有技巧的方法,但在MS VS2019中对我有效

#pragma execution_character_set( "utf-8" )

我个人会找一些图书馆,比如。也许您可以使用建议的更轻的库?@Aconcagua要使用外部库,我想您需要知道执行字符集的“名称”(或ID)。但是你怎么会得到呢?依赖操作系统。。。我不知道有任何最新的linux/bsd发行版不使用UTF-8作为本机字符集,所以您可能不需要关心。。。Windows:有一些API,我会开始搜索。。。甚至可能有一个库提供了合适的API。如何获得执行字符编码?嗯,在编译时必须有人告诉编译器。如果他们也将其内置到程序的数据中,那么您就可以知道。除了标识,还有UTF-X到UTF-Y和本机到宽本机到窄本机字符集。变化不大,所有这些都不适合所讨论的作业…@Aconcagua此外,使用这些方面(
std::wstring\u convert
)进行转换的功能已被弃用。