[英]Reading unicode characters from file in C
我需要从文件中读取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个字节的数据类型。 怎么做到这一点?
再次感谢你的回复........
好吧,你问题中的代码只读取文件的第一个字符,因此你必须实现某种循环结构才能处理该文件的全部内容。
现在, fgetwc()返回255
( 0xFF
)有三个原因:
你没有考虑文件的字节顺序标记 ,所以你最终读取它而不是实际的文件内容,
您没有在_wfopen()的mode
参数中指定转换模式标志,因此默认为text
, fgetwc()
因此尝试读取多字节字符而不是宽字符,
0xFF
( 小端 UTF-16 BOM的第一个字节)可能不是程序当前代码页中的前导字节,因此fgetwc()
返回它而无需进一步处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.