C++获得用户首选的编码或区域编码 我想用C++中的python代码实现相同的结果: import locale encoding = locale.getpreferredencoding()

C++获得用户首选的编码或区域编码 我想用C++中的python代码实现相同的结果: import locale encoding = locale.getpreferredencoding(),python,c++,boost,encoding,Python,C++,Boost,Encoding,在我的PCwindows 10上,编码为“cp936”,简体中文 我尝试下面的C++代码: test1.cpp: 问题1:这些代码将导致链接错误,除非包含另一个标题:包含,为什么?是否有任何文档说明要使用boost::locale还必须包括boost::filesystem 问题2:通过添加include,程序运行,但编码是utf-8,为什么?我认为它是“cp936”,与test1.cpp的结果一致 问:用c++获得语言环境编码的最佳方法是什么?用python的locale.getpreferr

在我的PCwindows 10上,编码为“cp936”,简体中文

我尝试下面的C++代码:

test1.cpp:

问题1:这些代码将导致链接错误,除非包含另一个标题:包含,为什么?是否有任何文档说明要使用boost::locale还必须包括boost::filesystem

问题2:通过添加include,程序运行,但编码是utf-8,为什么?我认为它是“cp936”,与test1.cpp的结果一致

问:用c++获得语言环境编码的最佳方法是什么?用python的locale.getpreferredencoding获得相同的结果。非常感谢

环境:win10 64位,vs2015,boost_1_65_1windows预构建,lib64-msvc-14.0

问题1:这些代码将导致链接错误,除非包含另一个标题:包含,为什么?是否有任何文档说明要使用boost::locale还必须包括boost::filesystem

自动链接无法按预期工作。这是一个可向boost库开发人员报告的bug。在这个特殊的例子中,我将猜测应该链接了1 Boost System,而Boost Locale/Boost System头中没有相应的pragmas

包含Boost文件系统恰好解决了链接错误,因为它确实有库pragma

由于未能显示链接器错误,因此使用python语言环境。getpreferredencoding的等效代码:

std::string getpreferredencoding()
{
    std::string strCodePage = boost::locale::util::get_system_locale();
    std::locale loc = boost::locale::generator().generate(strCodePage);
    return std::use_facet<boost::locale::info>(loc).encoding();
}

先看文件@消音器你怎么看出来我没看医生?您可以给出更有用的注释,例如它显示的所谓“文档”的正确位置,因为它正好显示了您需要做的事情。@UKMonkey谢谢,但我的问题没有解决方案。在提出这个问题之前,我已经找了两天了。我不太明白你的问题。我猜不出你是想获取还是设置编码。我真的不想在Win X上使用ZheTeng。但是官方文档或CSDN可能会帮助您编码CP936。
#include <iostream> 
#include <boost/locale.hpp>

using namespace std; 

int main()
{
    boost::locale::generator gen;
    string encoding = std::use_facet<boost::locale::info>(gen("")).encoding();
    cout << encoding << endl;
    return 0;
}
1>libboost_locale-vc140-mt-1_65_1.lib(generator.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(date_time.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(localization_backend.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(lcid.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(generator.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(date_time.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(localization_backend.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
1>libboost_locale-vc140-mt-1_65_1.lib(lcid.obj) : error LNK2001: unresolved external symbol "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
std::string getpreferredencoding()
{
    std::string strCodePage = boost::locale::util::get_system_locale();
    std::locale loc = boost::locale::generator().generate(strCodePage);
    return std::use_facet<boost::locale::info>(loc).encoding();
}