OS X上的字符串到wstring转换

时间:2010-01-16 12:14:46

标签: c++ unicode locale diacritics wstring

我正在尝试将C ++字符串转换为wstring。 我找到了以下代码,似乎处理重音,这正是我正在寻找的。

std::wstring widen(const std::string& s)
{
    std::vector<wchar_t> buffer(s.size());
    std::locale loc("fr_FR");
    std::use_facet< std::ctype<wchar_t> >(loc).widen(s.data(), s.data() + s.size(), &buffer[0]);

    return std::wstring(&buffer[0], buffer.size());
}

Source

不幸的是,代码崩溃的任何其他 loc 值都比C或POSIX崩溃。这里已经讨论过这个问题但没有成功:std::locale breakage on MacOS 10.6 with LANG=en_US.UTF-8herehere

是否有任何解决方法或其他方法可以执行此操作?

1 个答案:

答案 0 :(得分:1)

最简单的是

std::wstring w( s.begin(), s.end() );

...但是为了保留您需要{* 3}}的重音,这个codecvt可能会有用。