用fscanf读取文件出现乱码
时间: 2023-09-05 09:10:56 浏览: 263
C语言读取dat文件
5星 · 资源好评率100%
如果使用fscanf()读取文件出现乱码,可能是文件编码与程序编码不一致导致的。fscanf()函数默认使用的是程序编码,而如果读取的文件编码不同,就会出现乱码。
解决方法有两种:
1. 将文件编码转换为与程序编码一致。可以使用一些工具,如iconv、notepad++等,将文件编码转换为程序编码。
2. 使用fgetws()函数代替fscanf()函数。fgetws()函数是宽字符版本的fgets()函数,可以读取Unicode编码的文件,避免了编码不一致的问题。
下面是一个使用fgetws()函数读取Unicode编码文件的示例代码:
```
#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-16LE");
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-16LE。读取文件内容时,使用了fgetws()函数,逐行读取Unicode编码的文件内容,避免了编码不一致的问题。
阅读全文