M S*_*kel 4 delphi unicode indy google-analytics-api
我正在使用Delphi 2007(没有Unicode支持),我正在从Google AnalyticsAPI中检索XML和JSON数据.下面是我为URL引用路径获得的一些UTF-8编码数据:
GA:referralPath = /添加/%D0%9F%D0%B8%D0%B6%D0%B0%D0%BC
当我使用这个解码器解码它时,它正确生成:
GA:referralPath = /添加/Пижам
有没有我可以在Delphi 2007中使用的函数来执行这种解码?
更新 此数据对应于URL.最终我想要做的是将它存储在SqlServer数据库中(开箱即用 - 没有针对字符集修改设置).然后能够生成/创建一个带有此页面工作链接的html页面(注意:我只处理此示例中的url引用路径 - 显然要创建一个有效的url链接,需要一个源代码).
D2007支持Unicode,只是没有达到D2009 +的程度.D2007中的Unicode使用WideString
和存在的少数RTL支持函数来处理.
URL包含百分比编码的UTF-8字节八位字节.只需将这些序列转换为二进制表示,然后用于UTF8Decode()
将UTF-8数据解码为a 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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2150 次 |
最近记录: |