多国語を含む文字列はShift_JISでは保存できません。
このような文字列は文字コードにUTF-16やUTF-8を使ってファイルに保存します。
ユニコード文字列をファイルに保存する
文字コードを指定してファイルに保存するときは、コンストラクタやメソッドの引数のTEncodingで文字コードを指定します。
TStringList.SaveToFile・IOUtils.TFile.WriteAllText・IOUtils.TFile.WriteAllLinesなどのメソッドでは、引数のTEncodingで文字コードを指定します。
TMemIniFileやTStreamWriterではコンストラクタの引数で文字コードを指定します。
TStringList.SaveToFileを使ってUTF-8でファイルに保存する例
TStringList* sl = new TStringList();
sl->Add("ユニコード文字列");
sl->SaveToFile("C:\\test\\utf8.txt", TEncoding::UTF8);
IOUtils.TFile.WriteAllTextを使ってUTF-16でファイルに保存する例
#include <IOUtils.hpp>
TFile::WriteAllText("C:\\test\\utf16.txt", "ユニコード文字列", TEncoding::Unicode);
IOUtils.TFile.WriteAllLinesを使ってUTF-7でファイルに保存する例
#include <IOUtils.hpp>
TStringDynArray array;
array.Length = 3;
array[0] = "1行目";
array[1] = "2行目";
array[2] = "3行目";
TFile::WriteAllLines("C:\\test\\utf7.txt", array, TEncoding::UTF7);
TMemIniFileを使ってUTF-8でINIファイルに保存する例
#include <IniFiles.hpp>
TMemIniFile* ini = new TMemIniFile("C:\\test\\utf8.ini", TEncoding::UTF8);
ini->WriteString("Section", "Ident", "ユニコード文字列");
ini->UpdateFile();
TStreamWriterを使ってUTF-8でファイルに保存する例
TStreamWriter* sw = new TStreamWriter("C:\\test\\stream.txt", true, TEncoding::UTF8, 1024);
sw->WriteLine(UnicodeString(L"テスト1"));
sw->Write(UnicodeString(L"テスト2"));
sw->Close();
ユニコード文字列をファイルから読み込む
文字コードを指定してファイルから読み込むときは、コンストラクタやメソッドの引数のTEncodingで文字コードを指定します。
TStrings.LoadFromFile・IOUtils.TFile.ReadAllText・IOUtils.TFile.ReadAllLinesなどは、引数TEncodingで文字コードを指定します。
TMemIniFileやTStreamWriterではコンストラクタの引数で文字コードを指定します。
文字コードを指定しないときは、ファイルのBOMから適切な文字コードが自動的に選択されます。
TStrings.LoadFromFileを使ってUTF-8のファイルを読み込む例
TStringList* sl = new TStringList();
sl->LoadFromFile("C:\\test\\utf8.txt", TEncoding::UTF8);
UnicodeString s = sl->Text;
IOUtils.TFile.ReadAllTextを使ってUTF-16のファイルを読み込む例
#include <IOUtils.hpp>
UnicodeString s = TFile::ReadAllText("C:\\test\\utf16.txt", TEncoding::Unicode);
IOUtils.TFile.WriteAllLinesを使ってUTF-7のファイルを読み込む例
#include <IOUtils.hpp>
TStringDynArray array = TFile::ReadAllLines("C:\\test\\utf7.txt", TEncoding::UTF7);
for (int i = 0; i < array.Length; ++i)
ShowMessage(array[i]);
TMemIniFileを使ってUTF-8のINIファイルを読み込む例
TMemIniFile* ini = new TMemIniFile("C:\\test\\utf8.ini", TEncoding::UTF8);
UnicodeString s = ini->ReadString("Section", "Ident", "");
TStreamReaderを使ってUTF-8のファイルを読み込む例
TStreamReader* fs = new TStreamReader("C:\\test\\stream.txt", TEncoding::UTF8, true, 1024);
while (fs->EndOfStream == false)
{
UnicodeString s = fs->ReadLine();
ShowMessage(s);
}