在具有本地化UI的Win7上,error_code::message()返回非英语消息.据我所知(在Boost 1.54中,for system_error_category),上面的函数归结为以下WinAPI调用:
DWORD retval = ::FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ev,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPSTR) &lpMsgBuf,
0,
NULL
);
Run Code Online (Sandbox Code Playgroud)
如何让上述内容FormatMessage返回英文信息?我尝试设置语言环境,包括std函数和SetThreadLocale- 它没有帮助.
更新:只是澄清:基本上,我的问题是如何以编程方式"覆盖" 用户默认语言以及为什么设置区域设置不够.
我正在使用 boost-asio,我想正确处理错误消息。
在这个例子中,我打错了字(1278 而不是 127):
boost::system::error_code ec;
auto address=boost::asio::ip::address::from_string("1278.0.0.1",ec);
if(ec)
{
auto text=ec.message();
//Do Something with text but what is its encoding ?
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,它似乎是在 Windows 1252 中编码的(我使用的是 Windows 7)。所以看起来编码是操作系统编码。
但是,我找不到任何说明这一事实的文件。
boost asio 中的错误消息是否使用操作系统字符集进行编码?