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
我使用 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