我有一些不使用unicode的旧式MFC代码,并且在某些地方使用fopen / fgets从文件中读取文本。对于非ASCII字符,这会转换为我认为当前语言环境中的MBCS。例如,如果我的输入文件中有行字符Ø,它将转换为两个字符。如果我编译一个小的测试控制台程序,则不会发生这种转换。在MFC中有一种简单的方法可以禁用此翻译吗?较长的代码应进行重写,因此,在此之前,请真正寻找一个快速的短期补丁。当前正在考虑编写基于fread的替代fget。
编辑:输入文件编码为ANSI,下面是测试用例的十六进制转储。如果我将下面的文本直接复制并粘贴到我的应用程序中就可以正常工作,那么翻译就发生在应用程序中的fgets上。
如果我编写一个小的测试应用程序,如下所示,则翻译不会发生
#include <stdio.h>
int main()
{
char input[1024];
FILE *f = fopen("c:\\temp\\myfile.txt", "rt");
fgets(input, 1023, f);
fclose(f);
puts(input);
return 0;
}
Edit2 GetSystemDefaultLocaleName和GetUserDefaultLocaleName在工作测试应用程序和正在执行转换的应用程序中均返回EN-ie。这两个项目在常规程序配置中都具有“字符集=未设置”(以前是我认为是问题的MBCS)。