Как сохранить UTF-16 с файлом спецификации с помощью Inno Setup
Nov 29 2020
Как сохранить строку в текстовый файл в кодировке UTF-16 (UCS-2) с BOM?
SaveStringsToUTF8FileСохраняет как UTF-8.
Использование потоков сохраняет его как 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;
Ответы
2 MartinPrikryl Nov 30 2020 at 15:12
Поскольку Unicode string(в Unicode-версии Inno Setup - единственной версии с Inno Setup 6) фактически использует кодировку UTF-16 LE, все, что вам нужно сделать, это скопировать (Unicode) stringв байтовый массив ( AnsiString) bit- Мудрый. И добавьте 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;
Это полная противоположность: Inno Setup Pascal Script - чтение файла UTF-16 .