[Delphi] BOM無しUTF-8で保存
トップページへ
※全てのDelphi(楽天市場で探す ・ amazonで探す)で動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます
サンプル ※説明に必要な部分しか記述していません。
下記のサンプルとは別に
System.AnsiToUtf8
を使う方法もあります。詳しくは公式サイトをご覧下さい。
サンプル TEncoding.UTF8を使う方法
「TEncoding.UTF8」を使って保存し
out_list.SaveToFile(‘任意のファイル名’, TEncoding.UTF8);
そのファイルをメモ帳で確認すると「UTF-8(BOM 付き)」として保存されています。
そこで下記のサンプルがBOMなしの方が必要な場合に「BOMなしUTF-8」として保存する方法です。
このコードは関係する部分のみです。
なお、ポイントは「TEncoding.GetEncoding(CP_UTF8)」と「SaveToFile のエンコード部分」です。
Enc: TEncoding; begin in_list := TStringList.Create; out_list := TStringList.Create; Enc := TEncoding.GetEncoding(CP_UTF8); try //ANSIで読み込む in_list.LoadFromFile('任意のファイル'); //元々のファイルが UTF-8 の場合はこちら↓。UTF-8で読み込む // in_list.LoadFromFile('任意のファイル', Enc); out_list.Text := in_list.Text; //UTF-8で保存する out_list.SaveToFile('任意のファイル名', Enc); finally Enc.Free; out_list.Free; in_list.Free; end;
同様にメモ帳で確認すると、「UTF-8」(BOMなし)として保存されていました。
ちなみに、Windowsユニットで
CP_UTF8 = 65001;
と定義されています。
そして、このコードは下記のサイトを参考にさせて頂きました(謝辞)。
参考サイト
■Delphi 2009 とUnicode : Part II
・Delphi 2009 でのUnicode の扱い方と基本的な Unicode の構造について解説します。
https://docwiki.embarcadero.com/Support/ja/Delphi_2009%E3%81%A8Unicode:Part_II