2012-07-29 3 views
0

내가 GBK로 인코딩 된 file.txt를가 wchar_t를, 나는 그때 gbk에서 버퍼의 모든 단어를 인쇄하려면, ifstream::read을 통해 일부 바이트를 읽고 char 버퍼에 저장합니다.변환 문자 * *

내가 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++ 코드입니다. –

+0

GBK를 유용한 (예 : WCHAR) 것으로 변환하기 위해서는'iconv'와 같은 외부 라이브러리가 필요합니다. –

답변

2

wide-char 전문화를 사용해 보셨습니까? (ifstreamwifstreamcharwchar_t 이상 basic_ifstream의 템플릿 특수화는 각각 있습니다.)

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

+1, 이것은 표준 방법입니다 ... 명명 된 로케일은 모든 플랫폼에서 지원되지 않지만. – Potatoswatter