我有一个用gbk编码的file.txt,我通过ifstream::read读取了一些字节并将其存储在char缓冲区中,然后我想在gbk中打印缓冲区中的每个单词。

我认为这里需要wchar_t,所以我这样做:

int main()
{
    ifstream ifs("./file.txt");
    char buf[256];
    ifs.read(buf, 255);

    wchar_t wbuf[256];
    mbstowcs( wbuf, buf, 255);
    for (int i = 0; i < wcslen(wbuf); i++)
        wprintf(L"%c ", wbuf[i]);

}


我做对了吗?还是有更好的主意来完成这项工作?

谢谢。

最佳答案

您是否尝试过使用宽字符专长? (ifstreamwifstream分别是basic_ifstreamcharwchar_t的模板专业化。)

wifstream wifs("./file.txt");
wifs.imbue(locale("zh_CN.GBK"));
wchar_t wbuf[256];
wifs.read(buf, 255);

07-26 00:58