这种转换一般用于网页地址; 我不知道 Delphi 是不是有现成的函数, 用到了就写了一个.
//函数:function ToUTF8Encode(str: string): string;var b: Byte;begin for b in BytesOf(UTF8Encode(str)) do Result := Format('%s%%%.2x', [Result, b]);end;//测试:var str: string;begin str := '万一'; str := ToUTF8Encode(str); ShowMessage(str); //%E4%B8%87%E4%B8%80end;
为 "小月124" 写了个反向函数:
function ToUTF8Decode(const str: string): string;var List: TStrings; tmpStr: AnsiString; i: Integer;begin List := TStringList.Create; ExtractStrings(['%'], ['%'], PChar(str), List); SetLength(tmpStr, List.Count); for i := 0 to List.Count - 1 do Byte(tmpStr[i+1]) := StrToInt('$' + List[i]); List.Free; Result := UTF8Decode(tmpStr);end;{ 调用测试 }procedure TForm1.FormCreate(Sender: TObject);var s1: AnsiString; s2: WideString;begin s1 := '%E4%B8%87%E4%B8%80'; s2 := ToUTF8Decode(s1); ShowMessage(s2); { 万一 }end;