以这字符串为例:企独粤穗分字第004410号
Delphi的编码结果:
%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA%30%30%34%34%31%30%BA%C5
或
%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA004410%BA%C5
而c#的UrlEncode编码的结果则是:
%e4%bc%81%e7%8b%ac%e7%b2%a4%e7%a9%97%e5%88%86%e5%ad%97%e7%ac%ac004410%e5%8f%b7c#的UrlDecode函数不能解码Delphi的编码结果。我试过用浏览器编码,发现结果跟c#一样的,跟DELPHI的不同,有谁知道是为什么吗?谁有符合c#标准的delphi的UrlEncode函数?
Delphi的编码结果:
%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA%30%30%34%34%31%30%BA%C5
或
%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA004410%BA%C5
而c#的UrlEncode编码的结果则是:
%e4%bc%81%e7%8b%ac%e7%b2%a4%e7%a9%97%e5%88%86%e5%ad%97%e7%ac%ac004410%e5%8f%b7c#的UrlDecode函数不能解码Delphi的编码结果。我试过用浏览器编码,发现结果跟c#一样的,跟DELPHI的不同,有谁知道是为什么吗?谁有符合c#标准的delphi的UrlEncode函数?
解决方案 »
- 求年会抽奖软件
- 请教如何用代码来控制,当我选择了大的字体的时候,可以结算qrdbeidt,qrrichtext等等的位置。自动做调整
- 菜鸟第一次上CSDN,提问的第一个问题,请大家支持一下啊!在线等
- DELPHI高手请出招
- 我是一个delphi的新手,能不能介绍我一个入门的书,最好是电子读书,谢谢
- ★★如何更改InputBox的字体及将其中的英文改为中文?
- 向大家隆重推荐ELDOS的控件!其中有一个ELPage真的COOL!不过奇怪的很...
- not enough timers available 是为什么?
- 求DBCtrlsEh控件下载地址???
- 可以在Delphi程序中设定输入的全角、半角和输入法的切换?
- 用TADOQuery插入oracle数据表时出现“ORA-00942: 表或视图不存在”
- 怎么给sql语句断句啊?
->转为UTF8
E4BC81E78BACE7B2A4E7A997E58886E5AD97E7ACAC303034343130E58FB7再添加 % 分割就是了吧
idUri;ShowMessage(TIdURI.PathEncode( UTF8Encode('企独粤穗分字第004410号')));
const
UnsafeChars = '*#%<>+ []'; {do not localize}
var
i: Integer;
begin
Result := ''; {Do not Localize}
for i := 1 to Length(ASrc) do begin
if (AnsiPos(ASrc[i], UnsafeChars) > 0) or (ASrc[i]< #32) or (ASrc[i] > #127) then begin
Result := Result + '%' + IntToHex(Ord(ASrc[i]), 2); {do not localize}
end else begin
Result := Result + ASrc[i];
end;
end;
end;
ShowMessage(UrlEncode( UTF8Encode('企独粤穗分字第004410号')));
UTF8Encode这个函数包含的那个单元里?
var
i, count: Cardinal;
c: Cardinal;
begin
Result := 0;
if Source = nil then Exit;
count := 0;
i := 0;
if Dest <> nil then
begin
while (i < SourceChars) and (count < MaxDestBytes) do
begin
c := Cardinal(Source[i]);
Inc(i);
if c <= $7F then
begin
Dest[count] := Char(c);
Inc(count);
end
else if c > $7FF then
begin
if count + 3 > MaxDestBytes then
break;
Dest[count] := Char($E0 or (c shr 12));
Dest[count+1] := Char($80 or ((c shr 6) and $3F));
Dest[count+2] := Char($80 or (c and $3F));
Inc(count,3);
end
else // $7F < Source[i] <= $7FF
begin
if count + 2 > MaxDestBytes then
break;
Dest[count] := Char($C0 or (c shr 6));
Dest[count+1] := Char($80 or (c and $3F));
Inc(count,2);
end;
end;
if count >= MaxDestBytes then count := MaxDestBytes-1;
Dest[count] := #0;
end
else
begin
while i < SourceChars do
begin
c := Integer(Source[i]);
Inc(i);
if c > $7F then
begin
if c > $7FF then
Inc(count);
Inc(count);
end;
Inc(count);
end;
end;
Result := count+1; // convert zero based index to byte count
end;function Utf8Encode(const WS: WideString): AnsiString;
var
L: Integer;
Temp: UTF8String;
begin
Result := '';
if WS = '' then Exit;
SetLength(Temp, Length(WS) * 3); // SetLength includes space for null terminator L := UnicodeToUtf8(PAnsiChar(Temp), Length(Temp)+1, PWideChar(WS), Length(WS));
if L > 0 then
SetLength(Temp, L-1)
else
Temp := '';
Result := Temp;
end;
----------------------------------
这个UTF8String是什么?编译不通过啊
很感谢僵哥的热心,但不知道僵哥试过没有,反正我得出的结果跟delphi的UrlEncode函数得出的结果是一样的,是%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA004410%BA%C5跟C#的还是不一样。