Inno Setup replace a string in a UTF-8 file withou

2020-03-31 02:26发布

问题:

I need to change some values in a configuration file. The file is UTF-8 without BOM. I need to save it the same way. How do I do it with Inno Setup Unicode edition? Note: This doesn't work, and this doesn't show how to read the file correctly.

回答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;

LoadStringFromFileInCP and SaveStringToFileInCP come from:
Inno Setup - Convert array of string to Unicode and back to ANSI

The code needs Unicode version of Inno Setup (the only version as of Inno Setup 6).
For Unicode string literals, your .iss file must be in UTF-8 encoding with BOM.