gpt4 book ai didi

android - delphi xe6 目标多字节代码页中不存在 Unicode 字符的映射

转载 作者:行者123 更新时间:2023-11-29 15:58:40 25 4
gpt4 key购买 nike

以下代码在 Win32 上运行,无论如何在 Android 或 iOS 上运行都会抛出异常。异常(exception)情况是:“目标多字节代码页中不存在 Unicode 字符的映射”

function GetURLAsString(aURL: string): string;
var
lHTTP: TIdHTTP;
lStream: TStringstream;

begin
lHTTP := TIdHTTP.Create(nil);
lStream := TStringstream.Create(result);//create('',EEncoding.utf8),not work
try

lHTTP.Get(aURL, lStream);
lStream.Position := 0;
result := lStream.readstring(lStream.Size);//error here
finally
FreeAndNil(lHTTP);
FreeAndNil(lStream);
end;
end;

最佳答案

TStringStream 不是适合这种情况的类。它要求您在其构造函数中指定编码。如果不这样做,它将使用操作系统默认编码。在 Windows 上,该默认值特定于运行您的应用程序的用户帐户的区域设置。在移动设备上,默认值为 UTF-8。

HTTP 可以使用任意数量的字符集传输文本。如果数据与 TStringStream 使用的编码不匹配,您将遇到解码问题。

TIdHTTP 知道接收到的数据的字符集,并可以为您将其解码为 Delphi string,例如:

function GetURLAsString(aURL: string): string;
var
lHTTP: TIdHTTP;
begin
lHTTP := TIdHTTP.Create(nil);
try
Result := lHTTP.Get(aURL);
finally
FreeAndNil(lHTTP);
end;
end;

关于android - delphi xe6 目标多字节代码页中不存在 Unicode 字符的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26060832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com