2012-07-29 127 views
0

我在GBK编码的file.txt的,我通过阅读ifstream::read一些字节,并将它们存储到char缓冲区,然后我想打印在gbk在缓冲区中的每一个字。转换的char *至* wchar_t的

我认为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]); 

} 

我这样做对吗?或者有更好的想法来完成这项工作?

谢谢。

+0

固定标签。这是C++代码,而不是C. – 2012-07-29 05:29:26

+0

您需要一个外部库,例如'iconv'来将GBK转换为有用的东西(如WCHAR)。 – 2012-08-13 19:18:14

回答

2

您是否尝试过使用宽字符专业化? (ifstreamwifstream超过charwchar_tbasic_ifstream模板特分别。)

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

+1,这是标准的方式......尽管所有平台都不支持命名语言环境。 – Potatoswatter 2012-07-29 07:08:52