我有C++代碼轉換string
包含(ALCHEMICAL SYMBOL FOR AQUA REGIA)至
u16string
:爲什麼`wstring_convert`引發range_error?
#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的13年4月12日和locale
命令給我:
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
...
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
你真的打算,看起來像一個空心方角色轉換?因爲我看到一個空心的方形角色。 –
@ n.m。對不起,我添加了關於此字符的詳細信息 – diraria
在源代碼中使用非基字符集字符很脆弱。沒有人知道你的編輯或編譯器會做什麼。指定擴展字符的便攜方式是通過其通用字符名稱。 –