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