我需要從文件中讀取Unicode字符。我唯一需要做的就是提取他們的Unicode編號。我使用CodeBlock Mingw在Windows XP上運行。讀取文件中的Unicode字符C
我做這樣的事情
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
wchar_t *filename=L"testunicode.txt";
FILE *infile;
infile=_wfopen(filename,L"r");
wchar_t result=fgetwc(infile);
wprintf(L"%d",result);//To verify the unicode of character stored in file,print it
return 0;
}
我得到的結果作爲255的所有時間。
testunicode.txt被存儲在編碼的Unicode =(通過記事本中創建)
最後的任務就是從它可以包含任何語言字符的文件讀但wchar_t的是2字節只有這樣纔有能夠獲得unicode所有可能的語言字符?
需要你的幫助......
謝謝大家對您的回覆。
現在我改變了代碼。
#define UNICODE
#ifdef UNICODE
#define _UNICODE
#else
#define _MBCS
#endif
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main()
{
wchar_t *filename=L"testunicode.txt";
FILE *infile;
infile=_wfopen(filename,L"r");
wchar_t b[2];
fread(b,2,2,infile);//Read a character from the file
wprintf(L"%d",b[1]);
return 0;
}
它打印正確的UTF 16代碼。要使用它的項目需要閱讀來自世界不同語言的字符。那麼UTF-16會後綴還是應該將存儲文件的編碼更改爲UTF-32?另外,這裏wchar_t是2個字節,對於UTF-32我們需要一些數據類型和4個字節。如何做到這一點?再次
感謝您的答覆........
的[小端(http://en.wikipedia.org/wiki/Little-endian)UTF-16字節順序標記(http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16)具有0xFF(255)作爲文件的第一個字節。你總是得到相同的字節,因爲你的代碼不會遍歷文件的各個字節。 – 2012-03-01 21:08:36
@FrédéricHamidi,不應該將前兩個字節作爲單個16位值返回?如果是這樣,結果應該不是0xfffe? – 2012-03-01 21:15:25
@Mark,nope,[fgetwc()](http://msdn.microsoft.com/en-us/library/c7sskzc1%28v=vs.100%29。aspx)'根據是否以文本模式或二進制模式打開流,讀取[c as]多字節字符或寬字符。[_wfopen()](http://msdn.microsoft.com/zh-cn/library /yeby3zcb%28v=vs.100%29.aspx)沒有'mode'參數默認爲'text',所以'fgetwc()'試圖讀取一個多字節字符,在0xFF上扼流圈,並返回*(或所以我認爲,我沒有真正測試這個假設)*。 – 2012-03-01 21:22:53