CP_UTF8 为缺省定义的宏:
CP_ACP 为缺省当前系统所在的语言字符集的宏(可在系统地区/语言之中修改)
代码页:
936(为简体中文GBK字符集)
950(为繁体中文)
949(为阿西八韩文)
932(为鬼子日文 shift_jis)
详情:可以自行查阅代码页号。
但需要注意:
操作系统内部通常只带对应地区/语言的字符集,其它地区/语言字符集需要安装的。
源代码:
static std::wstring __A2W__(UINT cp, const std::string& s) noexcept
{
size_t len = MultiByteToWideChar(cp, 0, s.data(), s.size(), NULL, 0);
if (len == 0)
{
return std::wstring();
}
std::wstring buffer;
buffer.resize(len);
MultiByteToWideChar(CP_ACP, 0, s.data(), s.size(), buffer.data(), len);
return buffer;
}
static std::string __W2A__(UINT cp, const std::wstring& s) noexcept
{
size_t len = WideCharToMultiByte(CP_ACP, 0, s.data(), s.size(), NULL, 0, 0, 0);
if (len == 0)
{
return std::string();
}
std::string buffer;
buffer.resize(len);
WideCharToMultiByte(CP_ACP, 0, s.data(), s.size(), buffer.data(), len, 0, 0);
return buffer;
}
std::wstring Win32Native::_A2W(const std::string& s) noexcept
{
return __A2W__(CP_ACP, s);
}
std::string Win32Native::_W2A(const std::wstring& s) noexcept
{
return __W2A__(CP_ACP, s);
}
std::string Win32Native::_UnicodeToUtf8(const std::wstring& s) noexcept
{
return __W2A__(CP_UTF8, s);
}
std::wstring Win32Native::_Utf8ToUnicode(const std::string& s) noexcept
{
return __A2W__(CP_UTF8, s);
}