当文件名含有中文时,即使将fopen函数里的所有文件名都做了相应的修改,程序仍无法读取文件,这个问题该如何解决呢?
根据要求,文件名应该如下图所示:
但是运行程序,程序自动创建了一个新文件,并向这个新文件保存数据,程序也无法从要求的文件中读取数据。新文件的名称如下图所示:
当文件名含有中文时,即使将fopen函数里的所有文件名都做了相应的修改,程序仍无法读取文件,这个问题该如何解决呢?
根据要求,文件名应该如下图所示:
在 Windows 系统中,文件名编码使用的是 GB2312 编码,而在 C 语言中默认使用的是 ASCII 编码。因此,在程序中使用中文字符串作为文件名时,需要进行字符编码转换。
你可以使用 _setmode 函数将文件的编码模式设置为 _O_U8TEXT,这样就可以在程序中使用 UTF-8 编码的文件名,这样就可以解决该问题。
使用代码:
#include <fcntl.h>
int main()
{
_setmode(_fileno(stdout), _O_U8TEXT);
// 使用 fopen 函数打开文件
...
return 0;
}
还可以在fopen后面加个b,这样就能读取中文文件名。
如果使用了b后还不能读取,可能是由于该文件系统不支持unicode,需要使用第三方库或更换系统。
代码示例:
FILE *fp = fopen("文件名.txt", "rb");