Comment enregistrer un UTF-16 avec un fichier BOM avec Inno Setup
Nov 29 2020
Comment enregistrer une chaîne dans un fichier texte avec encodage UTF-16 (UCS-2) avec BOM?
Les SaveStringsToUTF8File
sauvegardes au format UTF-8.
L'utilisation de flux l'enregistre au format 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;
Réponses
2 MartinPrikryl Nov 30 2020 at 15:12
Comme l'Unicode string
(dans la version Unicode d'Inno Setup - la seule version d'Inno Setup 6) utilise en fait l'encodage UTF-16 LE, il vous suffit de copier le (Unicode) string
dans un tableau d'octets ( AnsiString
) bit- sage. Et ajoutez la nomenclature 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;
C'est juste l'opposé de: Inno Setup Pascal Script - Lecture du fichier UTF-16 .