croomのブログ

croomのメモ帳

Delphi7でUTF8(Nじゃない方)のテキストファイルを作る

こんばんは

ソフト作成中にメチャクチャ詰まったのでメモ書き残します。

事の発端は、UTF8Nだと読み込んでくれないソフトがあって、
そのファイルを弄り倒すソフトを作っていたんですが
Delphi7のUTF8EncodeだとどうしてもUTF8Nになってしまうという事からでした。

色々調べて色々な関数も試したけど駄目で、見つけた方法が以下です。

1.UTF8Stringの変数を作る。
2.UTF8Stringの変数の先頭に「#$EF+#$BB+#$BF」を付けてあげる。
3.残りもUTF8StringもしくはUTF8Encodeを使った文字を繋げてあげる。
4.これをTStringListに格納してあげて、TStringList.SaveToFile関数を実行する。

今回の私の場合は、要点だけ纏めると

前提:TListViewのvsReport表示でカラムが5個。名前はListView1とする。

                                                                                                  • -

procedure SaveUTF8File(FileName:String);
var
ts:TStringList;
st:UTF8String;
i:Integer;
begin
ts:=TStringList.Create;
for i:=0 to ListView1.Items.Count-1 do
begin
ts.Add(UTF8Encode(ListView1.Items.Item[i].SubItems.Strings[2])+
UTF8Encode(’N')+#9+UTF8Encode(ListView1.Items.Item[i].Caption)+#9+
UTF8Encode(ListView1.Items.Item[i].SubItems.Strings[0]));
end;
st:=#$EF+#$BB+#$BF+ts.text;
ts.text:=st;
ts.SaveToFile(FileName);
ts.Free;
end;

                                                                                                  • -

こんな感じでした。

独学な上、興味があることしか調べないのでBOMとかいう存在初めて知りました。
いつか(自分含めて)誰かの役に立ちますように・・・

ソフト自体は明日公開予定です。

ではでは。