Discussion:
[Lazarus] StringGrid1.SaveToCSVFile - UTF-8 with BOM
Sandro Cumerlato via Lazarus
2018-03-10 15:57:08 UTC
Permalink
Hello,
how can I save StringGrid content to a CSV file encoded to "UTF-8 with BOM"
format? (as default it is saved to "UTF-8 without BOM" format)

Thank you in advance for your help!

Sandro Cumerlato
Mattias Gaertner via Lazarus
2018-03-10 16:21:20 UTC
Permalink
On Sat, 10 Mar 2018 16:57:08 +0100
Post by Sandro Cumerlato via Lazarus
Hello,
how can I save StringGrid content to a CSV file encoded to "UTF-8 with BOM"
format? (as default it is saved to "UTF-8 without BOM" format)
var
s: string;
ms: TMemoryStream

ms:=TMemoryStream.Create;
try
s:=UTF8BOM;
ms.Write(s[1],length(s));
Grid.SaveToCSVStream(ms)
ms.Position:=0;
ms.SaveToFile('foo.csv');
finally
ms.Free;
end;
--
Michael Van Canneyt via Lazarus
2018-03-10 16:25:48 UTC
Permalink
Post by Mattias Gaertner via Lazarus
On Sat, 10 Mar 2018 16:57:08 +0100
Post by Sandro Cumerlato via Lazarus
Hello,
how can I save StringGrid content to a CSV file encoded to "UTF-8 with BOM"
format? (as default it is saved to "UTF-8 without BOM" format)
var
s: string;
ms: TMemoryStream
ms:=TMemoryStream.Create;
try
s:=UTF8BOM;
ms.Write(s[1],length(s));
Grid.SaveToCSVStream(ms)
ms.Position:=0;
ms.SaveToFile('foo.csv');
finally
ms.Free;
end;
You can also just use a filestream ?

Michael.
--
Sandro Cumerlato via Lazarus
2018-03-11 06:01:03 UTC
Permalink
Thank you Mattias and Michael for your help!

procedure TForm1.ButtonSaveClick(Sender: TObject);
const
UTF8BOM = #$EF#$BB#$BF;
var
s: String;
fs: TFileStream;
begin
s := ChangeFileExt(Application.ExeName, '.csv');
try
fs := TFileStream.Create(s, fmCreate);
fs.Write(UTF8BOM, SizeOf(UTF8BOM));
StringGrid1.SaveToCSVStream(fs, ';', True, False);
finally
fs.free;
end;
end;


On 10 March 2018 at 17:25, Michael Van Canneyt via Lazarus <
Post by Mattias Gaertner via Lazarus
On Sat, 10 Mar 2018 16:57:08 +0100
Post by Sandro Cumerlato via Lazarus
Hello,
Post by Sandro Cumerlato via Lazarus
how can I save StringGrid content to a CSV file encoded to "UTF-8 with BOM"
format? (as default it is saved to "UTF-8 without BOM" format)
var
s: string;
ms: TMemoryStream
ms:=TMemoryStream.Create;
try
s:=UTF8BOM;
ms.Write(s[1],length(s));
Grid.SaveToCSVStream(ms)
ms.Position:=0;
ms.SaveToFile('foo.csv');
finally
ms.Free;
end;
You can also just use a filestream ?
Michael.
--
_______________________________________________
Lazarus mailing list
https://lists.lazarus-ide.org/listinfo/lazarus
Loading...