ここでの最初の質問ですので、ご容赦ください。
私はプロプライエタリ構成ファイル(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);
#ifndef _UNICODEブロックで囲まれたfgets.cの行で、プロジェクトに_UNICODEが定義されています。
_setmodeまたはccsモードフラグを介してUTF-8互換性を持たせることができるように、この問題を解決するための洞察をいただければ幸いです。
ありがとう。