来自Unicode Inno Setup的LoadStringFromFile和StringChangeEx(Ansi文件)

use*_*276 13 unicode inno-setup ansi pascalscript

我正在尝试更新我的一个脚本以使用Inno Setup的Unicode版本.不幸的是我遇到了一个问题,StringChangeEx期望看到一个unicode String而不是我需要的AnsiString(不匹配的类型).是否有另一种方法可以从Unicode Inno Setup中替换匹配的AnsiStrings?

我正在使用WizardDirValue()以避免必须一直打字ExpandConstant('{app}\'),万一有人想知道为什么.

var
  AnsiData: AnsiString;
begin
  LoadStringFromFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
  { Type mismatch, StringChangeEx expects String which is Unicode }
  StringChangeEx(AnsiData, 'current', 'replace', True);
  SaveStringToFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
end;
Run Code Online (Sandbox Code Playgroud)

TLa*_*ama 19

由于声明LoadStringFromFileStringChangeEx函数和函数的参数,因此它们期望传递确切的类型,因此与它没有多大关系.您只需为StringChangeEx函数调用声明另一个变量,并在ANSI和Unicode字符串类型之间进行类型转换:

var
  UnicodeStr: string;
  ANSIStr: AnsiString;
begin
  if LoadStringFromFile('C:\File.txt', ANSIStr) then
  begin
    UnicodeStr := String(ANSIStr);
    if StringChangeEx(UnicodeStr, 'FromStr', 'ToStr', True) > 0 then
      SaveStringToFile('C:\File.txt', AnsiString(UnicodeStr), False);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

烦人,不是吗?

  • 谢谢,它在2018年仍然很烦人 (3认同)
  • 在2019年仍然很烦人。明年见 (3认同)
  • 确认的!2020年了还是很烦人 (2认同)