【Visual Studio 2022】iniファイルの読み込みで日本語や漢字が文字化けしてしまうときの対処法(UTF-16 LE)
iniファイルをC#から普通にGetPrivateProfileString()で読み込もうとすると、文字化けしてしまうことがあります。これに対処するには、iniファイルに保存されている文字コードの情報を変更する必要があります。
.INIファイルをメモ帳で編集し保存するときに、デフォルトでは「UTF-8」が文字コードとして指定されますが、それを保存するときに「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());
}
}
}