【发布时间】:2013-01-14 02:46:54
【问题描述】:
我知道如何使用 MultiByteToWideChar 将 UTF8 转换为 std::wstring:
std::wstring utf8to16( const char* src )
{
std::vector<wchar_t> buffer;
buffer.resize(MultiByteToWideChar(CP_UTF8, 0, src, -1, 0, 0));
MultiByteToWideChar(CP_UTF8, 0, src, -1, &buffer[0], buffer.size());
return &buffer[0];
}
但它是特定于 Windows 的,是否有一个跨平台的 C++ 函数可以做同样的事情,只使用 stdio 或 iostream?
【问题讨论】:
-
我建议你看看像Boost locale这样的东西。
-
我希望您的代码只是一个简单的示例代码,而不是生产代码。事实上,它不会检查来自
MultiByteToWideChar()调用的错误。此外,您可以直接在函数体内使用std::wstring,而不是在单独的std::vector中分配内存,然后deep-copy 到std::wstring。 -
对stackoverflow.com/questions/7232710/… 的回答展示了如何使用 std::wstring_convert 类和 std::codecvt 语言环境方面来做到这一点
标签: c++ utf-8 cross-platform