gpt4 book ai didi

delphi - 使用 Delphi 2007 解码 UTF-8 编码的西里尔字母

转载 作者:行者123 更新时间:2023-12-03 15:23:36 26 4
gpt4 key购买 nike

我正在使用 Delphi 2007(不支持 Unicode),并且正在从 Google Analytics API 检索 XML 和 JSON 数据。下面是我为 URL 引用路径获取的一些 UTF-8 编码数据:

ga:referralPath=/add/%D0%9F%D0%B8%D0%B6%D0%B0%D0%BC

当我使用 this decoder 对其进行解码时它正确生成:

ga:referralPath=/add/Пижам

我可以在 Delphi 2007 中使用一个函数来执行此解码吗?

更新该数据对应于一个URL。最终我想做的是将其存储在 SqlServer 数据库中(开箱即用 - 没有修改有关字符集的设置)。然后能够生成/创建带有此页面的工作链接的 html 页面(注意:在本例中我只处理 url 引用路径 - 显然要创建有效的 url 链接,需要源)。

最佳答案

D2007 支持 Unicode,只是程度不如 D2009+。 D2007 中的 Unicode 是使用 WideString 和少数现有的 RTL 支持函数来处理的。

URL 包含百分比编码的 UTF-8 字节八位组。只需将这些序列转换为其二进制表示形式,然后使用 UTF8Decode() 将 UTF-8 数据解码为 WideString。例如:

function HexToBits(C: Char): Byte;
begin
case C of
'0'..'9': Result := Byte(Ord(C) - Ord('0'));
'a'..'f': Result := Byte(10 + (Ord(C) - Ord('a')));
'A'..'F': Result := Byte(10 + (Ord(C) - Ord('A')));
else
raise Exception.Create('Invalid encoding detected');
end;
end;

var
sURL: String;
sWork: UTF8String;
C: Char;
B: Byte;
wDecoded: WideString;
I: Integer;
begin
sURL := 'ga:referralPath=/add/%D0%9F%D0%B8%D0%B6%D0%B0%D0%BC';
sWork := sURL;
I := 1;
while I <= Length(sWork) do
begin
if sWork[I] = '%' then
begin
if (I+2) > Length(sWork) then
raise Exception.Create('Incomplete encoding detected');
sWork[I] := Char((HexToBits(sWork[I+1]) shl 4) or HexToBits(sWork[I+2]));
Delete(sWork, I+1, 2);
end;
Inc(I);
end;
wDecoded := UTF8Decode(sWork);
...
end;

关于delphi - 使用 Delphi 2007 解码 UTF-8 编码的西里尔字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107717/

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