从C中的文件读取unicode字符

我需要从文件中读取Unicode字符。 我唯一需要做的就是提取他们的Unicode号码。 我在使用CodeBlock Mingw的Windows XP上运行。

我正在做这样的事情

#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存储在Encoding = Unicode(通过记事本创build)

最后的任务是从一个可以包含任何语言字符的文件中读取,但是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,我们需要一些数据types和4个字节。 如何做到这一点?

再次感谢你的回复……..

Solutions Collecting From Web of "从C中的文件读取unicode字符"

那么,你的问题中的代码只能读取你的文件的第一个字符,所以你将不得不实现某种循环结构来处理该文件的全部内容。

现在, fgetwc()返回2550xFF )有三个原因:

  • 你没有考虑文件的字节顺序标记 ,所以你最终读取它而不是实际的文件内容,

  • 您没有在_wfopen() mode参数中指定翻译模式标志,因此它默认为text ,因此fgetwc()尝试读取多字节字符而不是宽字符,

  • 0xFF ( little-endian UTF-16 BOM的第一个字节)可能不是程序当前代码页中的前导字节,所以fgetwc()会在没有进一步处理的情况下返回它。