Jak zapisać UTF-16 z plikiem BOM za pomocą Inno Setup
Nov 29 2020
Jak zapisać ciąg do pliku tekstowego z kodowaniem UTF-16 (UCS-2) z BOM?
SaveStringsToUTF8File
Zapisuje jako UTF-8.
Używanie strumieni zapisuje je jako ANSI.
var
i:integer;
begin
for i := 1 to length(aString) do begin
Stream.write(aString[i],1);
Stream.write(#0,1);
end;
stream.free;
end;
Odpowiedzi
2 MartinPrikryl Nov 30 2020 at 15:12
Ponieważ Unicode string
(w wersji Unicode Inno Setup - jedyna wersja od Inno Setup 6) faktycznie wykorzystuje kodowanie UTF-16 LE, wszystko, co musisz zrobić, to skopiować (Unicode) string
do tablicy bajtów ( AnsiString
) bit- mądry. I dodaj BOM UTF-16 LE ( FEFF
):
procedure RtlMoveMemoryFromStringToPtr(Dest: PAnsiChar; Source: string; Len: Integer);
external '[email protected] stdcall';
function SaveStringToUFT16LEFile(FileName: string; S: string): Boolean;
var
A: AnsiString;
begin
S := #$FEFF + S;
SetLength(A, Length(S) * 2);
RtlMoveMemoryFromStringToPtr(A, S, Length(S) * 2);
Result := SaveStringToFile(FileName, A, False);
end;
Jest to przeciwieństwo: Inno Setup Pascal Script - odczyt pliku UTF-16 .