2

对于 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版本)没有在消息框中正确显示它。

在此处输入图像描述

我还尝试将数据UTF-16从 PHP转换为

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;

任何帮助将不胜感激。

4

0 回答 0