0

我有 C++ 代码,string它将包含AQUA REGIA 的炼金术符号)转换为u16string

#include <string>
#include <codecvt>
#include <locale>
using namespace std;

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    string s = "";

    wstring_convert<codecvt_utf8<char16_t>, char16_t> converter;
    u16string s16 = converter.from_bytes(s);
    return 0;
}

请注意,我使用wstring或任何istream.

这给了我std::range_error

terminate called after throwing an instance of 'std::range_error'
  what():  wstring_convert::from_bytes

但是在 ideone 上,这段代码运行没有错误

使用-std=c++14.

为什么ideone没有错误,为什么我收到这个错误?


我有arch linux 4.12.13,locale命令给了我:

LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
...
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
4

1 回答 1

4

这不就是你的转换器应该的样子吗?

std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;

于 2017-09-17T10:21:11.453 回答