Преобразование строки в строку в OS X - PullRequest
2 голосов
/ 16 января 2010

Я пытаюсь преобразовать строку 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());
}

Источник

К сожалению, код падает для любого другого значения loc , отличного от C или POSIX. Эта проблема уже обсуждалась без успеха здесь: std :: locale breakage в MacOS 10.6 с LANG = en_US.UTF-8 , здесь или здесь .

Есть ли обходной путь или другой способ сделать это?

1 Ответ

1 голос
/ 16 января 2010

Самым простым будет

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

... но для сохранения акцентов вам потребуется codecvt , однако этот пример может быть полезен.

...