iniファイルは、読み出し/書き込みの際に、iniファイルの文字コードがUnicodeなら 読み出し/書き込みもユニコードして処理され、それ以外ならSHIFT-JISコードとして処理されます。
Unicodeで処理をさせたい場合には、BOM付きのiniファイルを用意することで、 Unicodeでiniファイルの読み書きを行うことができます。
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>
/*
Unicode(BOM付き)のiniファイルを作成する
*/
int _tmain
(
int argc
, _TCHAR* argv[]
)
{
/*
std::wcoutのロケールを設定
これを設定するだけで、std::wcoutで日本語が表示される
ようになります。
*/
std::wcout.imbue( std::locale( "", std::locale::ctype ) );
// iniファイルパス
std::wstring strInfilePath = L".¥¥TestUnicode.ini";
/*
Unicode(BOM付き)のiniファイルを作成する
*/
{
std::ofstream oIniFile( strInfilePath.c_str(), std::ios::binary );
if ( !oIniFile.is_open() ) {
std::wcout << L"ファイルの作成に失敗しました。" << std::endl;
}
else {
// BOMの書き込み(Unicodeにする為)
oIniFile.write( (const char*)"¥xff¥xfe", 2 );
if( oIniFile.fail() ) {
std::wcout << L"BOMの書き込みに失敗しました。" << std::endl;
}
// ファイルのクローズ
oIniFile.close();
}
}
/*
iniファイル書き込み
*/
if ( 0 == ::WritePrivateProfileString( L"SECTION", L"key", L"テスト文字列", strInfilePath.c_str() ) ) {
std::wcout << L"iniファイルへの書き込みに失敗しました。" << std::endl;
}
else {
std::wcout << L"iniファイルへ書き込みました。" << std::endl;
}
// 正常終了
return( 0 );
}
iniファイルへ書き込みました。