C++11 使用wstring\u convert的endian错误
我最近发现了C++11 使用wstring\u convert的endian错误,c++11,encoding,endianness,codecvt,C++11,Encoding,Endianness,Codecvt,我最近发现了头,所以我想在UTF-8和UTF-16之间进行转换 我使用C++11中的codevt\u utf8\u utf16facet和wstring\u convert。 我遇到的问题是,当我尝试将UTF-16字符串转换为UTF-8时,在UTF-16中,endianness再次发生变化 对于此代码: #include <codecvt> #include <string> #include <locale> #include <iostr
头,所以我想在UTF-8和UTF-16之间进行转换
我使用C++11中的codevt\u utf8\u utf16
facet和wstring\u convert
。
我遇到的问题是,当我尝试将UTF-16字符串转换为UTF-8时,在UTF-16中,endianness再次发生变化
对于此代码:
#include <codecvt>
#include <string>
#include <locale>
#include <iostream>
using namespace std;
int main(int argc, char const *argv[])
{
wstring_convert<codecvt_utf8_utf16<char16_t>, char16_t>
convert;
u16string utf16 = u"\ub098\ub294\ud0dc\uc624";
cout << hex << "UTF-16\n\n";
for (char16_t c : utf16)
cout << "[" << c << "] ";
string utf8 = convert.to_bytes(utf16);
cout << "\n\nUTF-16 to UTF-8\n\n";
for (unsigned char c : utf8)
cout << "[" << int(c) << "] ";
cout << "\n\nConverting back to UTF-16\n\n";
utf16 = convert.from_bytes(utf8);
for (char16_t c : utf16)
cout << "[" << c << "] ";
cout << endl;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char const*argv[]
{
wstring\u转换
转换
U16字符串utf16=u“\ub098\ub294\ud0dc\uc624”;
这确实是一只虫子,
它将在5.3中修复,无法复制:谢谢你的回复,这很奇怪,我正在使用gcc 5,今晚我将尝试从源代码处编译它,看看是否有相同的行为。将编译器切换到gcc也不会在coliru上复制这一点:好吧,它在OS X和Windows上工作,所以我猜libstdc++有问题,我将作为报告缺陷