gpt4 book ai didi

c++ - 为什么 `wstring_convert` 抛出 range_error?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:35 25 4
gpt4 key购买 nike

我有 C++ 代码将包含 🜆( ALCHEMICAL SYMBOL FOR AQUA REGIA ) 的 string 转换为 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

但是on ideone this code runs without error .

在使用 -std=c++14 编译时,我在 g++ 7.2.0 和 clang 4.0.1 中均收到错误。

为什么在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=

最佳答案

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

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

关于c++ - 为什么 `wstring_convert` 抛出 range_error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46262597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com