2013-05-04 82 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); 
}