使用区域设置和流的 mbsrtowcs 和 wcsrtombs 的 C++ 等效项

cat*_*ive 5 c++ linux locale internationalization libstdc++

是否有使用 std::locale 和 C++ 流功能的 mbsrtowcs 和 wcsrtombs 类型函数的 C++ 等效项?

我试图找出使用标准库在 std::string 和 std::wstring 之间来回转换的最佳方法。似乎 std::locale 几乎可以做到这一点,但我对一些细节或它可能有哪些限制有点不确定。

一些细节:我使用的是 Linux,它使用 utf-8 作为本机编码。我想从 utf-8 std::string 到 std::wstring 并返回而不丢失信息。

我认为 Windows 上的区域设置可能存在一些限制,但我并不特别担心它们。只要答案在 Linux 上有效并且没有 libstdc++ 之外的依赖项,即没有 boost 依赖项,我就很高兴。

感谢背景信息的链接。

注意:似乎有些混乱。多个 char 可以代表 UTF-8 中的单个字符,因此在从 wchar_t 转换为 char 时不考虑这一点的函数将无法工作。

wen*_*eng 1

您是否尝试过创建一些简单的函数?

std::wstring StringToWString(const std::string& src)
{
 std::wstring str(src.length(),L' ');
 std::copy(src.begin(), src.end(), str.begin());
 return str; 
}


std::string WStringToString(const std::wstring& src)
{
 std::string str(src.length(), ' ');
 std::copy(src.begin(), src.end(), str.begin());
 return str; 
}

void main()
{
 string s1 = "Hello World!";
 wstring s2 = StringToWString(s1);
 s1 = WStringToString(s2);
} 
Run Code Online (Sandbox Code Playgroud)