这里有我的第一个问题,请耐心等待。
我正在使用一些使用专有配置文件的软件(想想INI文件)。这些文件在程序启动时加载,数据在运行时使用。可以在运行时更改数据,并在程序关闭时更新配置文件本身。
我们一直在为我们的软件添加新的语言支持,并遇到了问题。当我们在运行时向这些配置文件提供包含非ASCII字符的数据时,配置文件无法正确识别它们,因为它们不兼容UTF-8。
我试图修改在启动时填写的FILE对象的创建,以使用ccs = UTF-8模式,我也尝试做_setmode(_fileno(fin),_O_U8TEXT);打开FILE流后调用,但两次尝试都会导致以下断言:
File: fgets.c
Line: 75
Expression: ( (_Stream->_flag & _IOSTRG) ||
((_textmode_safe(_fileno(_Stream)) == _IOINFO_TM_ANSI) &&
!_tm_unicode_safe(_fileno(_Stream))))
更奇怪的是,这个断言似乎源于
_VALIDATE_STREAM_ANSI_SETRET(stream, EINVAL, retval, NULL);
在fgets.c中的行,它被#ifndef _UNICODE块包围,我为我的项目定义了_UNICODE。
任何有关解决此问题以便通过_setmode或ccs模式标志获得UTF-8兼容性的任何见解都将不胜感激。
感谢。