我需要从文件中读取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