Python 中可以通过 locale.getpreferredencoding()来获取本地编码:
import locale
print(locale.getpreferredencoding()) # 我这得到 cp936
试了下 C++中的 locale
#include <locale>
#include <iostream>
int main()
{
std::locale loc;
std::cout << loc.name() << std::endl; // 我这打印出 C
return 0;
}
C++中有没有简单的方法得到得到本地编码的名称, 比如"cp936", "utf-8"之类的...
1
wevsty 2017-10-10 20:08:00 +08:00
Windows 下面默认的 locale 就算 C,而不是系统的代码页
你可以用 std::locale::global(std::locale("chs")); 来设置 locale。 如果你想知道 Windows 系统的代码页设定,那么需要调用 API。 比如:GetACP,GetCPInfoEx 给你个例子 #include <windows.h> void cout_loc() { CPINFOEX cpinfo = { 0 }; GetCPInfoEx(CP_ACP, 0, &cpinfo); std::cout << cpinfo.CodePageName << std::endl; } |
2
pezy 2017-10-11 11:18:13 +08:00
```cpp
#include <iostream> #include <locale> int main() { std::setlocale(LC_ALL, ""); std::cout << "LC_ALL: " << std::setlocale(LC_ALL, NULL) << std::endl; std::cout << "LC_CTYPE: " << std::setlocale(LC_CTYPE, NULL) << std::endl; } ``` |
3
justou OP |
4
gnaggnoyil 2017-10-11 12:00:12 +08:00
不太清楚你想要的"本地编码"指的是什么.每个 ios_base 对象都会被指定一个 locale 的.你想要的是不是 std::cout.getloc() ?
|
5
justou OP 解决办法:
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(); } https://stackoverflow.com/questions/46686649/c-get-the-user-preferred-encoding-or-locale-encoding/46690618#46690618 |