Printing char16\t打印

Printing char16\t打印,printing,c++11,cout,wchar-t,char16-t,Printing,C++11,Cout,Wchar T,Char16 T,最近,我在将Windows应用程序移植到Linux时遇到了一个问题,因为这两个平台的大小不同。我尝试使用编译器开关,但在打印这些字符时出现了问题(我假设GCCwcout认为所有wchar\u t都是32位的) 那么,我的问题是:有没有一个好的方法来(w)coutchar16\u t?我问是因为它不起作用,我被迫将它转换为wchar\t: cout << (wchar_t) c; cout试试看: #include <locale> #include <codecv

最近,我在将Windows应用程序移植到Linux时遇到了一个问题,因为这两个平台的大小不同。我尝试使用编译器开关,但在打印这些字符时出现了问题(我假设GCC
wcout
认为所有
wchar\u t
都是32位的)

那么,我的问题是:有没有一个好的方法来
(w)cout
char16\u t
?我问是因为它不起作用,我被迫将它转换为
wchar\t

cout << (wchar_t) c;
cout试试看:

#include <locale>
#include <codecvt>
#include <string>
#include <iostream>

int main()
{
    std::wstring_convert<std::codecvt_utf8_utf16<wchar_t> > myconv;
    std::wstring ws(L"Your UTF-16 text");
    std::string bs = myconv.to_bytes(ws);
    std::cout << bs << '\n';
}
#包括
#包括
#包括
#包括
int main()
{
std::wstring_conv;
std::wstring ws(L“您的UTF-16文本”);
std::string bs=myconv.to_字节(ws);

std::cout您到底想做什么?您的输出(终端?)甚至需要2或4字节的字符吗?如果是文本处理,并且您的终端需要UTF8,那么最好将数据流转换为UTF8并只发出普通字符。@Let_Me_-Be-Windows(如Java)不打破任何标准,因为16位是这些系统设计的标准。你不能责怪他们Unicode标准后来改变了!@ BO java不能逻辑地打破C++标准,因为它是java。C++的Windows实现可以。而且BWT.旧版本的Windows没有违反标准,因为它们使用UCS-2插件的16位。ing(这很好)。@Let_Me_Be-我认为这是关于Unicode标准的,因为你不能轻易地“打破”没有任何关于WHARART.T的大小或编码的C++标准,无法打印CAR16HT和CHAR32的T,这对于C++ 11来说是非常尴尬的。U16CUT和U32 CUT非常需要。所以你说没有STD函数可以打印CHAR16YT?我的意思是没有转换……奇怪的是,如果你认为它是用的话。他们完成了c++0x版本的定稿。我们在等你设计、测试、实现、获得现场经验、提出建议,然后引导建议通过标准化过程。我们忙于做其他事情。哦,火焰之战……就像我说的,这不是一个核心语言功能,在sam会议上是令人悲伤和有趣的是的,如果
#include
能够与
gcc
一起工作,那就太好了;)