对于 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;
任何帮助将不胜感激。