Inno Setup으로 BOM 파일로 UTF-16을 저장하는 방법

Nov 29 2020

BOM을 사용하여 UTF-16 (UCS-2) 인코딩을 사용하여 문자열을 텍스트 파일에 저장하는 방법은 무엇입니까?

SaveStringsToUTF8FileUTF-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

유니 코드 string( Inno Setup 의 유니 코드 버전 -Inno Setup 6의 유일한 버전)는 실제로 UTF-16 LE 인코딩을 사용하므로 (유니 코드) string를 바이트 배열 ( AnsiString) 비트로 복사하기 만하면됩니다. 슬기로운. 그리고 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-Reading UTF-16 file 의 반대입니다 .