ホワイトレンド

lplpl

【C#】iniファイルの読み込みで文字化けしてしまうときの対処法【Visual Studio 2022】

Visual Studio 2022】iniファイルの読み込みで日本語や漢字が文字化けしてしまうときの対処法(UTF-16 LE)

文字化け

iniファイルをC#から普通にGetPrivateProfileString()で読み込もうとすると、文字化けしてしまうことがあります。これに対処するには、iniファイルに保存されている文字コードの情報を変更する必要があります。

文字コードの確認

.INIファイルをメモ帳で編集し保存するときに、デフォルトでは「UTF-8」が文字コードとして指定されますが、それを保存するときに「UTF-16 LE」として保存します。

変更方法は、メモ帳の左上のファイルから名前をつけて保存を選択し、この画面でエンコードUTF-16 LEに設定変更してから保存します。(上書き保存で大丈夫です)

UTF-16 LE


これでiniファイルの内容が日本語でも正常に内容が読み取れるようになります。

読み取り成功

INIファイル読み取りのソースコード(Form1.cs)

using System.Runtime.InteropServices;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileStringW", CharSet = CharSet.Unicode, SetLastError = true)]
        static extern uint GetPrivateProfileString(string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString, uint nSize, string lpFileName);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder(256);
             GetPrivateProfileString("Data", "Name", "none", sb, Convert.ToUInt32(sb.Capacity), ".\\kokyaku.ini");

            MessageBox.Show(sb.ToString());
        }
    }
}