Je veux obtenir le même résultat avec les codes python en C++:C++ obtenir l'encodage préféré de l'utilisateur ou le codage locale
import locale
encoding = locale.getpreferredencoding()
Le encoding
est 'CP936' sur mon PC (Windows 10, chinois simplifié)
-je essayer les codes C++ suivants: de
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;
}
Hmm ... Je ne suis toujours pas satisfait, donc je me tourne vers boost::locale
(boost_1_65_1), mais il y a des comportements étranges.
test2.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;
}
Problème 1: Les codes entraîneront des erreurs de lien, à moins inclure une autre tête: #include <boost/filesystem.hpp>
, pourquoi? Y at-il un document à dire pour utiliser boost::locale
on doit également inclure 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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@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)" ([email protected]@[email protected]@[email protected]@XZ)
Problème 2: En ajoutant #include <boost/filesystem.hpp>
, le programme fonctionne, mais encoding
est "utf-8", pourquoi? Je pensais que ce soit « CP936 », en accord avec le résultat de test1.cpp
Question: Quelle est la meilleure idée pour obtenir le codage local par C++ (obtenir le même résultat avec locale.getpreferredencoding()
de python). Merci beaucoup!
Environnement: win10 64bit, vs2015, boost_1_65_1 (fenêtres pré-construction, lib64-msvc-14,0)
Lisez d'abord le document! – Silencer
@Silencer Comment pouvez-vous voir que je n'ai pas lu le document?Vous pourriez donner un commentaire plus utile, par exemple le bon endroit du soi-disant 'document' – oz1
Cela se voit parce que http://www.boost.org/doc/libs/1_62_0/libs/locale/doc/html/examples .html montre exactement ce que vous devez faire. – UKMonkey