我沒有Delphi 2006,所以我測試了Delphi 2007上的代碼;您應該:
將帶有「%」字符的字符串轉換爲純UTF8字符串;
將UTF8字符串轉換爲寬字符串(UTF8Decode);
轉換寬字符串到ANSI字符串與日本編碼(調用WideCharToMultiByte):
const
SrcStr = 'file://localhost/G:/test/%E6%B0%97%E3%81%BE%E3%81%90%E3%82%8C%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF.mp3';
function Src2Utf8(const S: string): string;
var
I: Integer;
S1: string;
B: Byte;
begin
I:= 0;
Result:= '';
SetLength(S1, 3);
S1[1]:= '$';
while I < Length(S) do begin
Inc(I);
if S[I] <> Char('%') then Result:= Result + S[I]
else begin
Inc(I);
S1[2]:= S[I];
Inc(I);
S1[3]:= S[I];
B:= StrToInt(S1);
Result:= Result + Char(B);
end;
end;
end;
procedure TForm8.Button1Click(Sender: TObject);
var
S: WideString;
S1: string;
begin
S:= Utf8Decode(Src2Utf8(SrcStr));
SetLength(S1, 4 * Length(S)); // more than enough
FillChar(PChar(S1)^, Length(S1), 0);
WideCharToMultiByte(932 {shift-jis codepage}, 0, PWideChar(S), Length(S),
PChar(S1), Length(S1), nil, nil);
S1:= PChar(S1); // to remove ending zeroes
Label1.Caption:= S1;
end;
當我測試上面的代碼具有不同的字體從字體與名字從「@」開始日本人符號出現旋轉90度與問題的日文字符串相比逆時針方向。帶有SHIFTJIS_CHARSET的「Arial Unicode MS」字體給出精確(非旋轉)的外觀。
我已經找到了解決辦法,我得到了一個指針的位置: http://www.delphigroups.info/2/5/209620.html然後在httpApp.pas中試驗httpDecode,解決方案是:TntEdit2.Text:= UTF8Decode(HTTPDecode('file:// localhost/G:/ test /%E6%B0%97%E3%81%BE%E3%81%90%E3%82%8C%E3%83%AD%E3%83%9E%E3%83%B3%E3%83%86% E3%82%A3%E3%83%83%E3%82%AF.mp3' )); – Irwan 2011-01-29 12:46:38