Delphi 2007解码UTF-8西里尔文,如何改写成长尾?

2026-04-10 01:551阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计391个文字,预计阅读时间需要2分钟。

Delphi 2007解码UTF-8西里尔文,如何改写成长尾?

我在使用Delphi 2007(不支持Unicode)的情况下,从Google Analytics API中检索XML和JSON数据。以下是URL引用路径获取的一些UTF-8编码数据:ga:referralPath=/add/%D0%9F%D0%B8%D0%B6%D0%B0%D0%BC

Delphi 2007解码UTF-8西里尔文,如何改写成长尾?

我正在使用Delphi 2007(没有Unicode支持),我正在从Google AnalyticsAPI中检索 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中使用的函数来执行这种解码?

UPDATE
该数据对应于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;

标签:西

本文共计391个文字,预计阅读时间需要2分钟。

Delphi 2007解码UTF-8西里尔文,如何改写成长尾?

我在使用Delphi 2007(不支持Unicode)的情况下,从Google Analytics API中检索XML和JSON数据。以下是URL引用路径获取的一些UTF-8编码数据:ga:referralPath=/add/%D0%9F%D0%B8%D0%B6%D0%B0%D0%BC

Delphi 2007解码UTF-8西里尔文,如何改写成长尾?

我正在使用Delphi 2007(没有Unicode支持),我正在从Google AnalyticsAPI中检索 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中使用的函数来执行这种解码?

UPDATE
该数据对应于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;

标签:西