Thanks for the link
I have choose the solution of modifying BOM Unicode to Non-BOM Unicode, because the solution of using TFileStream instead of file name have a bug: it duplicates the section when writing into INI File using stream.
This is my modified code that works fine, except that there is a missing truncation of file while converting into non-BOM Unicode file:
var
fileName: string;
ini: tiniFile;
FileStream: TFileStream;
MarkHolder: DWord;
Contents: string;
begin
FileName:= 'Tasjeel.ini';
FileStream := TFileStream.Create(FileName, fmOpenReadWrite);
MarkHolder := FileStream.ReadDWord;
if (MarkHolder and $00BFBBEF) = $00BFBBEF then
begin
FileStream.Position := 3;
Memo1.Lines.Add('BOM');
SetLength(Contents, FileStream.Size - 3);
FileStream.Read(Pointer(Contents)^, FileStream.Size - 3);
FileStream.Position:= 0;
FileStream.Write(Pointer(Contents)^, length(Contents));
end
else
begin
Memo1.Lines.Add('Not BOM');
end;
FileStream.Free;
Ini := TIniFile.Create(fileName);
Memo1.lines.Add(ini.ReadString('Settings', 'Database', 'No database'));
Ini.WriteString('Settings', 'NewParam', 'Azzoz');
ini.Free;