fscanf读取utf-8文件出现乱码
时间: 2023-07-29 16:07:52 浏览: 145
如果使用fscanf()读取UTF-8编码的文件出现乱码,可能是因为fscanf()函数默认使用的是ASCII编码,而UTF-8编码使用了多个字节表示一个字符,因此会出现乱码。
解决方法有两种:
1. 将文件编码转换为ASCII编码。可以使用一些工具,如iconv、notepad++等,将文件编码转换为ASCII编码。
2. 使用fgetws()函数代替fscanf()函数。fgetws()函数是宽字符版本的fgets()函数,可以读取Unicode编码的文件,避免了编码不一致的问题。
下面是一个使用fgetws()函数读取UTF-8编码文件的示例代码:
```
#include <stdio.h>
#include <wchar.h>
int main() {
FILE *fp;
wchar_t filename[50], line[50];
wprintf(L"请输入文件名:");
wscanf(L"%ls", filename);
fp = _wfopen(filename, L"r, ccs=UTF-8");
if (fp == NULL) {
wprintf(L"文件打开失败!\n");
return 1;
}
while (fgetws(line, sizeof(line)/sizeof(wchar_t), fp) != NULL) {
wprintf(L"%ls", line);
}
fclose(fp);
return 0;
}
```
在以上代码中,使用了_wfopen()函数打开文件,并指定了文件编码为UTF-8。读取文件内容时,使用了fgetws()函数,逐行读取Unicode编码的文件内容,避免了编码不一致的问题。
阅读全文