我知道,stackoverflow上有几个类似的主题,但我还没有找到解决我的问题的方法。 我尝试读取UTF-8文件。英文字母一切都好,但我看不懂俄文或西班牙文字。 这是我的代码。举个例子。
FILE * fp;
char line[3];
fp = fopen("letters.data", "r");
if (fp == NULL)
return;
int i=0;
fread(line,1,3, fp); // BOM
wint_t w;
while( w = fgetwc(fp) )
{
wprintf(L"%c", w);
}
fclose(fp);
这是letters.data
档案:
输出数据:
我不知道该怎么做。
答案 0 :(得分:2)
fgetwc()
返回wchar
(“宽字符”)。这与UTF-8不同。 wchar
是一些固定大小(通常是16位)。 UTF-8字符的长度在1到4个字节之间,需要一些特殊的解析。对于非常简单的工作,Reading Unicode (UTF-8) in C很有用。如果您需要更复杂的工作,请参阅ICU。
请注意,您在开始时假设有BOM。 UTF-8文件不应该有BOM,但有些Windows编辑器仍然添加一个。你应该小心这个问题。
如果你所做的只是从一个流中读取并写入另一个流,那么就不必担心UTF-8了。您可以将它们视为原始字节。但如果您要解释它们,那么您将需要正确解码UTF-8。
也就是说,您还应该验证您确实拥有UTF-8文件。例如,在Windows上,将文件写入各种代码页或UTF-16(UTF-16是应该具有BOM的文件类型)是很常见的。我几乎总是发现在十六进制编辑器中查看文件是有用的,以确保字节符合您的想法。