这里是我的第一个问题,所以请多多包涵。
我正在使用一些使用专有配置文件的软件(想想 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 兼容性,我们将不胜感激。
谢谢。