Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C或C+中是否有与setvbuf()等价的函数+;要处理宽字符? C++函数通过各种缓冲选项来调整文件流。但该流只能处理纯chars。宽字符(wchar\u t)是否有等效版本可用?setvbuf在Windows 8+中工作,可以在控制台窗口中写入UTF8。从Windows 10 build 1803开始,仍不支持读取UTF8_C++_C_Character Encoding_Stream_Buffer - Fatal编程技术网

C或C+中是否有与setvbuf()等价的函数+;要处理宽字符? C++函数通过各种缓冲选项来调整文件流。但该流只能处理纯chars。宽字符(wchar\u t)是否有等效版本可用?setvbuf在Windows 8+中工作,可以在控制台窗口中写入UTF8。从Windows 10 build 1803开始,仍不支持读取UTF8

C或C+中是否有与setvbuf()等价的函数+;要处理宽字符? C++函数通过各种缓冲选项来调整文件流。但该流只能处理纯chars。宽字符(wchar\u t)是否有等效版本可用?setvbuf在Windows 8+中工作,可以在控制台窗口中写入UTF8。从Windows 10 build 1803开始,仍不支持读取UTF8,c++,c,character-encoding,stream,buffer,C++,C,Character Encoding,Stream,Buffer,在Visual Studio中,您可以使用特定于编译器的\u setmode在控制台窗口中读取/写入UTF16。但这在其他编译器中可能不是一个选项(上次我检查时,MinGW-32不支持它)。唯一的其他选择是基于WriteConsoleW编写流函数 请注意,控制台窗口可能不支持在0xFFFF上方打印Unicode代码点,除非您使用SetCurrentConsoleFontEx将控制台字体更改为适当的字体,例如“MS哥特式”(仍然无法处理许多代码点) #包括 #包括 #包括 #包括 int main

在Visual Studio中,您可以使用特定于编译器的
\u setmode
在控制台窗口中读取/写入UTF16。但这在其他编译器中可能不是一个选项(上次我检查时,MinGW-32不支持它)。唯一的其他选择是基于
WriteConsoleW
编写流函数

请注意,控制台窗口可能不支持在
0xFFFF
上方打印Unicode代码点,除非您使用
SetCurrentConsoleFontEx
将控制台字体更改为适当的字体,例如
“MS哥特式”
(仍然无法处理许多代码点)

#包括
#包括
#包括
#包括
int main()
{
_setmode(_fileno(stdout),_O_16text);
_设置模式(_fileno(stdin),_O_16text);
标准:wcout>utf16;

std::wcout不需要等价物-您提供的
char
数组足够大,可以容纳任意数量的
wchar\u t
字符。您可能需要确保它足够对齐,仅此而已。您可能不需要
wchar\u t
流。记住这一点。然后您需要解码UTF-8从
char
流。即使在Windows上,您也最好使用UTF-8。然后,文件流有字节,您可以将它们解码为UTF-8。如何做到这一点是另一个问题。这不是字符数组,而是字节数组,在C中也被称为
char
。是的。如果您需要N
wchar\u t
字符的缓冲区,请提供大小为
N*sizeof(wchar\u t)
字节的缓冲区-作为常规的
char
,因为
setvbuf()
函数需要的是
char*
而不是
无符号char*
。请注意
wchar\u t
的大小不一定是
char
大小的两倍;它可能是
大小的1倍或4倍(在不同的平台上),其尺寸范围甚至可能更大。
#include <iostream>
#include <string>
#include <io.h> 
#include <fcntl.h> 

int main() 
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
    std::wcout << L"UTF16 English ελληνικά\n";

    std::wstring utf16;
    std::wcin >> utf16;
    std::wcout << utf16 << "\n";

    return 0;
}