Inno Setup替换不带BOM的UTF-8文件中的字符串

时间:2019-01-23 17:57:09

标签: utf-8 inno-setup byte-order-mark

我需要更改配置文件中的某些值。该文件是没有BOM的UTF-8。我需要以相同的方式保存它。如何使用Inno Setup Unicode版?注意:This不起作用,并且this没有显示如何正确读取文件。

1 个答案:

答案 0 :(得分:1)

const
  CP_UTF8 = 65001;

{ ... }
var
  FileName: string;
  S: string;
begin
  FileName := 'test.txt';
  if not LoadStringFromFileInCP(FileName, S, CP_UTF8) then
  begin
    Log('Error loading the file');
  end
    else
  if StringChangeEx(S, 'žluťoučký kůň', 'ďábelské ódy', True) <= 0 then
  begin
    Log('No value was replaced');
  end
    else
  if not SaveStringToFileInCP(FileName, S, CP_UTF8) then
  begin
    Log('Error writing the file');
  end
    else
  begin
    Log('Replacement successful');
  end;
end;

LoadStringFromFileInCPSaveStringToFileInCP来自: Inno Setup - Convert array of string to Unicode and back to ANSI

代码需要Inno Setup的Unicode版本。
对于Unicode字符串文字,您的.iss文件必须采用带有BOM的UTF-8编码。