2013-05-04 83 views
2

我只想读取读取正常c中的unicode文本文件。 下面的代码是不工作的同时,读取c中的unicode文件

#include<stdio.h> 

int main() 
{ 
     FILE *ptr_file; 
     char buf[1000]; 

     ptr_file =fopen("input.txt","r"); 
     if (!ptr_file) 
      return 1; 

     while (fgets(buf,1000, ptr_file)!=NULL) 
      printf("%s",buf); 

    fclose(ptr_file); 
     return 0; 
} 
+5

你读它的罚款。问题在于你使用非Unicode功能打印它。此外,由于你没有缓冲,当宽字符跨越999/1000字节边界(或1999/2000等)时,你可能会遇到问题。 – Dave 2013-05-04 09:16:31

+0

取决于我们正在讨论哪种形式的“unicode”。这个问题可能是Dave提到的,如果它使用UTF-8(每个标记8位,其中大多数标记与ASCII表示相同,但​​有些标记使用多个标记来制作一个字符),但也可能是文本是每个令牌16位,在这种情况下代码根本不起作用,因为它假定令牌是8位(如果在某个古代机器上编译,最有可能是9) – 2013-05-04 09:23:24

+0

意味着缓冲区获得“”每个time/ – user1035089 2013-05-04 09:37:53

回答

4

试试这个:

#include <locale.h> 
#include <stdio.h> 
#include <wchar.h> 

int main() 
{ 
    FILE *input; 
    wchar_t buf[1000]; 

    setlocale(LC_CTYPE,"it_IT.UTF-8"); // put your locale here 

    if ((input = fopen("input.txt","r")) == NULL) 
     return 1; 

    while (fgetws(buf,1000,input)!=NULL) 
     wprintf(L"%s",buf); 

    fclose(input); 
}