【发布时间】:2018-10-20 06:44:52
【问题描述】:
C++ std::setvbuf 函数可以通过各种缓冲选项来调节文件流。该流只能处理普通的chars。是否有宽字符 (wchar_t) 的等效版本可用?
【问题讨论】:
-
不需要等价物——你提供一个
char数组,其大小足以容纳你想要的任意数量的wchar_t字符。您可能必须确保它充分对齐,仅此而已。 -
您可能不想要
wchar_t的流。请记住UTF-8 is everywhere。然后您需要从char流中解码 UTF-8。 -
即使在 Windows 上,您也最好使用 UTF-8。然后文件流有 bytes 并且您将它们解码为 UTF-8。如何做到这一点是一个不同的问题
-
它不是一个字符数组,而是一个字节数组,它在 C 中也被称为
char。 -
是的。如果您想要一个包含 N 个
wchar_t字符的缓冲区,请提供一个大小为N * sizeof(wchar_t)字节的缓冲区 — 与常规char一样,因为setvbuf()函数需要一个char *而不是unsigned char *。请注意wchar_t的大小不必是char的两倍;它可能是相当合理的大小的 1 或 4 倍(在不同平台上),并且大小范围甚至可能更大。
标签: c++ c character-encoding stream buffer