我想用c ++中的python代码实现相同的结果:
import locale
encoding = locale.getpreferredencoding()
我的电脑上的encoding
是'cp936'(Windows 10,简体中文)
我尝试以下C ++代码:
test1.cpp:
#include <iostream>
#include <clocale>
using namespace std;
int main()
{
setlocale(LC_ALL, "");
string lc_all = std::setlocale(LC_ALL, NULL);
cout << lc_all << endl; // prints Chinese (Simplified)_China.936
return 0;
}
嗯......我仍然不满意,所以我转向boost::locale
(boost_1_65_1),但有一些奇怪的行为。
测试2.cpp:
#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:代码会导致链接错误,除非包含另一个标头:#include <boost/filesystem.hpp>
,为什么?是否有任何文件要说使用boost::locale
,还必须包含boost::filesystem
?
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)
问题2:通过添加#include <boost/filesystem.hpp>
,程序会运行,但encoding
是“utf-8”,为什么?我认为它是'cp936',与 test1.cpp
问题:通过c ++获取语言环境编码的最佳方法是什么(使用python的locale.getpreferredencoding()
实现相同的结果)。非常感谢!
环境: win10 64位,vs2015,boost_1_65_1(windows pre-build,lib64-msvc-14.0)
答案 0 :(得分:0)
问题1:代码会导致链接错误,除非包含另一个标题:#include,为什么?是否有任何文件要说使用boost :: locale还必须包含boost :: filesystem?
自动链接无法正常工作。这是一个可以向boost库devs报告的错误。在这种特殊情况下,我将 guess ¹应该已经链接了Boost系统,并且Boost Locale / Boost System标头不包含适当的编译指示。< / p>
包含Boost文件系统发生以解决链接错误,因为 具有库编译指示
¹,因为您无法显示链接器错误
答案 1 :(得分:0)
python setEGLContextClientVersion()
的等价物:
locale.getpreferredencoding()