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++有问题,我将作为报告缺陷