Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++ std::locale将运行时错误异常抛出到;en“美国UTF-8”;场所_C++_Localization_Visual Studio 2019 - Fatal编程技术网

C++ std::locale将运行时错误异常抛出到;en“美国UTF-8”;场所

C++ std::locale将运行时错误异常抛出到;en“美国UTF-8”;场所,c++,localization,visual-studio-2019,C++,Localization,Visual Studio 2019,因此,我在使用std::locale的项目中遇到了以下代码片段的奇怪问题: std::locale local; try { local = std::locale ("en_US.UTF-8"); } catch (std::runtime_error &e) { std::cout << e.what(); } std::locale local; 试一试{ local=std::locale(“en_US.UTF-8”); } 捕获(标准:

因此,我在使用std::locale的项目中遇到了以下代码片段的奇怪问题:

std::locale local;     
try {
    local = std::locale ("en_US.UTF-8");
}
catch (std::runtime_error &e) {
    std::cout  << e.what();
}
std::locale local;
试一试{
local=std::locale(“en_US.UTF-8”);
}
捕获(标准::运行时错误&e){

Windows上的std::cout区域名称与现代POSIX ish系统上的不同。特别是,它们从不包含“UTF-8”或任何类似的名称


Windows中不支持UTF-8,可以通过选择标准区域设置来打开。您的运气可能会更好,也可能不会更好。

您是否应该使用连字符而不是下划线?例如,en US vs en_USA部署问题将是最明显的原因。VS2019仍然使用与中使用的DLL同名的运行时DLLVS2015和VS2017,msvcp140.dll对于区域设置很重要。但是如果您没有复制它们,并且得到了某种安装程序留下的旧版本,那么您将遇到麻烦。您确实必须部署程序的发布版本,顺便说一句,最后的注释非常混乱。@HansPassant感谢您的回答。因此我四处查看,并在项目属性中查看了以下设置:目标平台版本:8.1,平台工具集:Visual Studio 2015(v140),字符集:使用Unicode字符集。您认为它们是否相关?它与msvcp140.dll的特定版本无关,您使用最后安装的版本运行。这将是您计算机上的VS2019版本。但如果您忘记复制它,则不必在生产计算机上。您必须部署这些dll,硬要求如果您对正确使用它感到不舒服,那么请使用“其他工具和框架”部分提供的。