如何使用BOM的UTF-16(UCS-2)编码将字符串保存到文本文件?
将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;
由于Unicode string
(在Inno Setup的Unicode版本中,这是Inno Setup 6的唯一版本)实际上使用UTF-16 LE编码,因此你所需要做的就是将(Unicode)复制string
到字节数组(AnsiString
)中,明智的。并添加UTF-16 LE BOM(FEFF
):
procedure RtlMoveMemoryFromStringToPtr(Dest: PAnsiChar; Source: string; Len: Integer);
external 'RtlMoveMemory@kernel32.dll 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脚本-读取UTF-16文件。