|
■No98536 (tosh さん) に返信 > 下記処理でtmpファイルに一時保存した後 > GetPrivateProfileStringAを使って読み込む方法で
UTF-8 な ini ファイルを GetPrivateProfileStringA で読み取るのは NG UTF-8 な ini ファイルを GetPrivateProfileStringW で読み取るのは NG
UTF-16LE な ini ファイルを GetPrivateProfileStringA で読み取るのは OK UTF-16LE な ini ファイルを GetPrivateProfileStringW で読み取るのは OK Shift_JIS な ini ファイルを GetPrivateProfileStringL で読み取るのは OK Shift_JIS な ini ファイルを GetPrivateProfileStringW で読み取るのは OK
とはいえ、元が UTF-8 なファイルなのであれば、折角なので BOM 付き UTF-16 (リトルエンディアン) で保存して、W 系 API を使うべきだと思いますよ。
「Shift_JIS の文字集合に無い文字」が UTF-8 の ini ファイルに含まれていた場合に備えて。
[DllImport("KERNEL32.DLL", CharSet = CharSet.Auto)] public static extern uint GetPrivateProfileString(…
> 目的通りの動作が実現できました。
StreamWriter を using ブロックで囲むか、または Close メソッドを呼び出しましょう。 あるいは StreamWriter ではなく File.WriteAllText で出力するとか。
File.WriteAllText(tmpFilePath, File.ReadAllText(filePath, Encoding.UTF8), Encoding.Unicode); GetPrivateProfileString(section, key, "", sb, Convert.ToUInt32(sb.Capacity), tmpFilePath);
|