问题小小影响大大,大家来看看啊。 ( 积分: 100 )

  • 主题发起人 主题发起人 6713827
  • 开始时间 开始时间
6

6713827

Unregistered / Unconfirmed
GUEST, unregistred user!
这是服务端HEAD头信息。
[[red]************************
10:59:13: ---【localhost】 请求文件---/蔡依林/爆米花的味道.mp3
Accept=*/*
Accept-Encoding=gzip, deflate
User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)
Host=localhost
Connection=Keep-Alive
************************
10:59:19: ---【localhost】 请求文件---/%E8%94%A1%E4%BE%9D%E6%9E%97/%E7%88%86%E7%B1%B3%E8%8A%B1%E7%9A%84%E5%91%B3%E9%81%93.mp3
Accept=*/*
User-Agent=NSPlayer/10.0.0.3802 WMFSDK/10.0
Accept-Encoding=gzip, deflate
Host=localhost
Connection=Keep-Alive[/red]]
一个是暴风影音,一个是MEDIA PLAY
暴风影音请求文件时。【/蔡依林/爆米花的味道.mp3】就能正确返回文件!
但是MEDIA PLAY请求文件时。【/%E8%94%A1%E4%BE%9D%E6%9E%97/%E7%88%86%E7%B1%B3%E8%8A%B1%E7%9A%84%E5%91%B3%E9%81%93.mp3】
就不能正确返回文件,提示找不到文件。
但是英文名就可以。就是不支持中文名。
请大家告诉我怎样解决这个问题啊!
到底该怎样转换这个编码啊?
 
你这个我验证过了, 应该是UTF-8格式,
找相同转换代码进行转换即可
 
如下代码,测试通过,其中UTF8ToStr函数是在本论坛上找的,由goostudio提供。
注意斜杠必须去除,否则出错,因此你应该根据斜杠来分开处理。
function UTF8ToStr(const str: UTF8String): string;
var
s: pchar;
i: integer;
tmp: string;
begin
tmp := '';
result := '';
s := PChar(str);
i := 0;
while i < length(s) do begin
tmp := tmp + chr(HexToInt(s + s[i + 1]));
inc(i, 2);
end;
result := Utf8Decode(tmp);
end;
procedure TForm1.Button13Click(Sender: TObject);
var ss: string;
begin
ss:='%E8%94%A1%E4%BE%9D%E6%9E%97%E7%88%86%E7%B1%B3%E8%8A%B1%E7%9A%84%E5%91%B3%E9%81%93';
showmessage(UTF8ToStr(StringReplace(ss,'%','',[rfReplaceAll])));
end;
 
直接使用WideString 类型 就可以了
 
大哥,能不能把你的HexToInt函数发出来一下啊?
 
谢谢,明白了!
 
后退
顶部