Inno Setup使用UTF-8数据从PHP页面填充ComboBox

时间:2013-08-14 13:06:02

标签: php unicode inno-setup

对于ComboBox,我设置onchange处理程序OnChange := @RegionOnChange并将其定义如下:

procedure RegionOnChange(Sender: TObject);
var
  WinHttpReq: Variant;
begin
  try
    WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
    WinHttpReq.Open('GET', '{#MyDomain}get_school.php?region=' + Regions.Strings[RegionComboBox.ItemIndex], false);
    WinHttpReq.Send();
    if WinHttpReq.Status = 200 then
    begin
      MsgBox(WinHttpReq.ResponseText, mbError, MB_OK)
    end;
  except
    MsgBox('error', mbError, MB_OK)
  end;
end;

问题是返回的数据是UTF-8,而Inno Setup(即使我使用Unicode版本)也没有在消息框中显示。

enter image description here

我还尝试使用

将数据从PHP转换为UTF-16
echo iconv('UTF-8', 'UTF-16LE//IGNORE', "здравейте");

但不会成功。

编辑:我尝试使用MultiByteToWideChar。使用我的测试字符串“здравейте”,WideLen设置为18,这似乎是正确的但第二次调用不会复制Result中的任何内容。它仍然是空的。

function 
MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; const
                             lpMultiByteStr: AnsiString; 
                             cchMultiByte: Integer; 
                             lpWideCharStr: String; 
                             cchWideChar: Integer): Integer;
external 'MultiByteToWideChar@kernel32.dll stdcall';

const
  CP_UTF8 = 65001;

function Utf8ToUtf16(const S: AnsiString): String;
var
  WideLen: Integer;
begin
  WideLen := MultiByteToWideChar(CP_UTF8, 0, S, Length(S), Result, 0);
  Result := StringOfChar(#0, WideLen);
  MultiByteToWideChar(CP_UTF8, 0, S, Length(S), Result, WideLen);
end;

非常感谢任何帮助。

0 个答案:

没有答案