Delphi XE8: HTTPEncode 转换字符串错误

Delphi XE8: HTTPEncode convert string error

我使用 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' 吗?

我不确定这个 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

@David Heffernan,@Remy Lebeau,非常感谢您花时间帮助我。你的回答让我明白了为什么我不能用 HTTPEncode 转换我的字符串。
我自己尝试了很多次,直到找到这个:

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('萨原小学', 65001);
输出 = %E8%90%A9%E5%8E%9F%E5%B0%8F%E5%AD%A6%E6%A0%A1