ini ファイルには、文字コードが ACP (日本語環境では Shift_JIS) のものと、Unicode (UTF-16 with LE BOM) のものがあります。
また、ini ファイルを操作する Win32 API には、char * を引数とする ANSI版 (GetPrivateProfileStringA, WritePrivateProfileStringA など) と、wchar_t * を引数とする Wide文字版 (GetPrivateProfileStringW, WritePrivateProfileStringW など) があります。
ini ファイル (ACP, Unicode) と API (ANSI版, Wide文字版) で 4 パターンの組み合わせが発生します。
Windows 2000 以降の API は、読み書き時に内部で ini ファイルの文字コードにあわせて自動的に変換が行われるようになっています。
Windows NT 4 では、"ANSI版 API と ACP ini ファイルの組み合わせ", "Wide文字版 API と ACP ini ファイルの組み合わせ" が正しく動作するようです。
Wide文字版 API で ACP ini ファイルを扱う場合のみ自動的に変換されるようです。
Windows 95, 98, Me では、ANSI版 API と ACP ini ファイルの組み合わせのみが正しく動作するようです。
自動的な変換は行われないようです。
Windows 2000- | Windows NT 4 | Windows 95, 98, Me | ||||
---|---|---|---|---|---|---|
ANSI API | Wide API | ANSI API | Wide API | ANSI API | Wide API | |
ACP ini file | OK | OK | OK | OK | OK | NG |
Unicode (UTF-16LE) ini file | OK | OK | NG | NG | NG | NG |