Delphi XE8:HTTPEncode转换字符串错误

时间:2018-03-12 02:20:14

标签: delphi delphi-xe8

我使用Delphi XE8中的HTTPEncode()函数来编码日文文本。有些字符可以正确编码,但有些字符不能。以下是一个例子:

aStr := HTTPEncode('萩原小学校');

我期待这个:

aStr = '%E8%90%A9%E5%8E%9F%E5%B0%8F%E5%AD%A6%E6%A0%A1'

但我得到了这个:

aStr = '%E8%90%A9%E5%8E%9F%E5%B0%8F%3F%E6%A0%A1'

有人可以帮助我将'萩原小学校'编码为'%E8%90%A9%E5%8E%9F%E5%B0%8F%E5%AD%A6%E6%A0%A1'吗?

2 个答案:

答案 0 :(得分:4)

我不确定这个HTTPEncode功能是什么。该名称的Web.HTTPApp中有一个函数。也许这就是你所指的。如果是这样,它会被明确标记为已弃用。假设您已启用编译器警告,编译器将告诉您这一点,并告诉您也改为使用TNetEncoding.UTL.Encode

我们试试看:

{$APPTYPE CONSOLE}
uses
  System.NetEncoding;

begin
  Writeln(TNetEncoding.URL.Encode('萩原小学校'));
end.

输出

%E8%90%A9%E5%8E%9F%E5%B0%8F%E5%AD%A6%E6%A0%A1

答案 1 :(得分:-1)

<@> David Heffernan,@ Remy Lebeau,非常感谢你抽出时间帮助我。你的回答让我理解为什么我不能用HTTPEncode转换我的字符串。
我自己尝试了很多次,直到我找到了这个:Delphi: Convert from windows-1251 to Shift-JIS

function MyEncode(const S: string; const CodePage: Integer): string;
var
  Encoding: TEncoding;
  Bytes: TBytes;
  b: Byte;
  sb: TStringBuilder;
begin
  Encoding := TEncoding.GetEncoding(CodePage);
  try
    Bytes := Encoding.GetBytes(S);
  finally
    Encoding.Free;
  end;

  sb := TStringBuilder.Create;
  try
    for b in Bytes do begin
      sb.Append('%');
      sb.Append(IntToHex(b, 2));
    end;
    Result := sb.ToString;
  finally
    sb.Free;
  end;
end;  

MyEncode(&#39;萩原小学校&#39;,65001);
产量= <强>%E8%90%A9%E5%8E%9F%E5%B0%8F%E5%AD%A6%E6%A0%A1