C++Builder XE3でユニコード文字列の保存と読み込み

多国語を含む文字列は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);
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください