Warm tip: This article is reproduced from serverfault.com, please click

unicode-如何使用Inno Setup保存带有BOM表文件的UTF-16

(unicode - How to save a UTF-16 with BOM file with Inno Setup)

发布于 2020-11-29 12:29:26

如何使用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;
Questioner
none
Viewed
0
Martin Prikryl 2020-12-02 18:39:30

由于Unicode string(在Inno SetupUnicode版本中,这是Inno Setup 6的唯一版本)实际上使用UTF-16 LE编码,因此你所需要做的就是将(Unicode)复制string到字节数组(AnsiString)中,明智的。并添加UTF-16 LE BOMFEFF):

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文件