从C中的文件中读取unicode字符

时间:2012-03-01 20:56:56

标签: c windows 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(通过记事本创建)

最后的任务是从一个文件中读取,该文件可以包含任何语言的字符,但是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个字节的数据类型。怎么做到这一点?

再次感谢您的回复........

1 个答案:

答案 0 :(得分:4)

好吧,你问题中的代码只读取你文件的第一个字符,所以你必须实现某种循环结构才能处理该文件的全部内容。

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

  • 您没有考虑该文件的byte-order mark,因此您最终会将其读取而不是实际的文件内容,

  • 您未在_wfopen()mode参数中指定翻译模式标记,因此默认为textfgetwc()因此尝试读取多字节字符而不是宽字符,

  • 0xFFlittle-endian UTF-16 BOM的第一个字节)可能不是程序当前代码页中的前导字节,因此fgetwc()将返回进一步处理。