Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++_Visual C++ - Fatal编程技术网

C++ 从UTF-8字节数组创建字符串?

C++ 从UTF-8字节数组创建字符串?,c++,visual-c++,C++,Visual C++,考虑一下表情符号C++有一个简单的解决方案 #包括 #包括 内部主(空){ std::string s=u8“这里是用于试验unicode的示例代码,要转换unicode字符/字符串并在控制台中打印它,假设您设置了正确的区域设置、控制台代码页并执行了适当的字符串转换,它对许多unicode字符都可以正常工作(如果需要,例如,char32\u t,char16\u t和char8\u t需要转换) 除了你想显示的字符,它不是那么容易,运行一个测试需要花费大量的时间,这可以通过我下面的修改代码或者通

考虑一下表情符号C++有一个简单的解决方案

#包括
#包括
内部主(空){

std::string s=u8“这里是用于试验unicode的示例代码,要转换unicode字符/字符串并在控制台中打印它,假设您设置了正确的区域设置、控制台代码页并执行了适当的字符串转换,它对许多unicode字符都可以正常工作(如果需要,例如,
char32\u t
char16\u t
char8\u t
需要转换)

除了你想显示的字符,它不是那么容易,运行一个测试需要花费大量的时间,这可以通过我下面的修改代码或者通过了解所需的详细信息(如代码页(windows可能不支持)来改进,所以只要不变得无聊,就可以自由地进行实验;)

提示,最好添加代码写入文件,让它运行,并在一小时后检查文件中的结果。要使其正常工作,您需要将BOM标记放入文件中,但不能在文件以UTF编码方式打开之前,通过
wofstream::imbue()执行此操作
到特定区域设置,对于BOM,它取决于endianess,它是Windows上的UTF-X LE编码方案,其中X是8、16或32,必须使用
wcout
wchar\u t
写入文件才能成功

有关更多信息,请参阅代码开始,并尝试注释掉/取消注释代码的部分,以查看不同且更快的结果

顺便说一句。这段代码的要点是尝试系统支持的所有可能的区域设置/代码页,直到您在控制台中看到您的笑脸或ulitmaly失败为止

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#pragma警告(按,4)
#如果!已定义UNICODE&!已定义\u UNICODE
#错误“编译为unicode”
#恩迪夫
#定义线__
//注意:在此处更改所需的默认代码页(未使用)
#定义代码\u页面CP\u UTF8
//错误处理辅助方法
void StringCastError()
{
std::wstring error=L“未知错误”;
开关(GetLastError())
{
案例错误\u缓冲区不足\u:
error=L“提供的缓冲区大小不够大,或未正确设置为NULL”;
打破
案例错误\u无效\u标志:
错误=L“为标志提供的值无效”;
打破
案例错误\u无效\u参数:
错误=L“任何参数值都无效。”;
打破
大小写错误\u无\u UNICODE\u翻译:
错误=L“在字符串中发现无效的Unicode。”;
打破
违约:
打破
};

std::wcerr有帮助吗?-我不这么认为。C++20为UTF-8编码字符串添加了一个新的
char8\u t
std::u8string
。在windows上最好的办法是对它们进行utf16编码,并使用
std::wcout
…要进行转换,请先找出控制台设置所需的代码页,然后再进行转换它不会打印漂亮闪亮的微笑,但会打印为控制台调整的字符。否则转换为
UTF-8
/multi byte或
wchar\u t
等不是问题显示它到什么?给定一个字节数组,我如何获得相应的代码点?还有,关于msys2的好提示。@royco:这是一个完全独立的问题。@royco Try使用“\u”或“\u”。