Cómo guardar un archivo UTF-16 con BOM con Inno Setup
Nov 29 2020
¿Cómo guardar una cadena en un archivo de texto con codificación UTF-16 (UCS-2) con BOM?
Los SaveStringsToUTF8File
guarda como UTF-8.
El uso de transmisiones lo guarda como 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;
Respuestas
2 MartinPrikryl Nov 30 2020 at 15:12
Como Unicode string
(en la versión Unicode de Inno Setup , la única versión a partir de Inno Setup 6) en realidad usa la codificación UTF-16 LE, todo lo que necesita hacer es copiar el (Unicode) string
en una matriz de bytes ( AnsiString
) bit- sabio. Y agregue el UTF-16 LE BOM ( 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;
Esto es justo lo contrario de: Inno Setup Pascal Script - Lectura de un archivo UTF-16 .