delphi的UrlEncode方法编码后的结果不能被c#的UrlDecode方法解码,怎么办?

KL2 2009-01-21 12:07:49
以这字符串为例:企独粤穗分字第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%b7

c#的UrlDecode函数不能解码Delphi的编码结果。

我试过用浏览器编码,发现结果跟c#一样的,跟DELPHI的不同,有谁知道是为什么吗?

谁有符合c#标准的delphi的UrlEncode函数?
...全文
1890 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
refgd 2010-11-10
  • 打赏
  • 举报
回复
看看,正在找这些东西
fjjiantuo 2009-10-16
  • 打赏
  • 举报
回复
我愿意开贴,给分200
fjjiantuo 2009-10-16
  • 打赏
  • 举报
回复
url中文文件名问题解决,但有些电脑还是打不开(若是英文还是打得开)
fjjiantuo 2009-02-28
  • 打赏
  • 举报
回复
僵哥 谢谢.编码一下就好了
CruelYoung123 2009-01-21
  • 打赏
  • 举报
回复
要指明是哪种编码方式。
僵哥 2009-01-21
  • 打赏
  • 举报
回复
uses
idUri;

ShowMessage(TIdURI.PathEncode( UTF8Encode('企独粤穗分字第004410号')));
Frank.WU 2009-01-21
  • 打赏
  • 举报
回复
->企独粤穗分字第004410号
->转为UTF8
E4BC81E78BACE7B2A4E7A997E58886E5AD97E7ACAC303034343130E58FB7

再添加 % 分割就是了吧
KL2 2009-01-21
  • 打赏
  • 举报
回复
那该如何解决?
僵哥 2009-01-21
  • 打赏
  • 举报
回复
C#应该是编码的UTF8
KL2 2009-01-21
  • 打赏
  • 举报
回复
不好意思,是我搞错了,僵哥的程序没有问题,问题解决了,谢谢!
KL2 2009-01-21
  • 打赏
  • 举报
回复
哦,原来是Temp: UTF8String;
很感谢僵哥的热心,但不知道僵哥试过没有,反正我得出的结果跟delphi的UrlEncode函数得出的结果是一样的,是%C6%F3%B6%C0%D4%C1%CB%EB%B7%D6%D7%D6%B5%DA004410%BA%C5

跟C#的还是不一样。
KL2 2009-01-21
  • 打赏
  • 举报
回复
Temp: UTF8String;
----------------------------------
这个UTF8String是什么?编译不通过啊
僵哥 2009-01-21
  • 打赏
  • 举报
回复
function UnicodeToUtf8(Dest: PAnsiChar; MaxDestBytes: Cardinal; Source: PWideChar; SourceChars: Cardinal): Cardinal;
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;
KL2 2009-01-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 unsigned 的回复:]
Delphi(Pascal) codefunction UrlEncode(const ASrc: string): string;
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}

[/Quote]

UTF8Encode这个函数包含的那个单元里?
僵哥 2009-01-21
  • 打赏
  • 举报
回复
function UrlEncode(const ASrc: string): string;
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号')));
starluck 2009-01-21
  • 打赏
  • 举报
回复


自己在下INDY的這個代碼,寫個函數來解決。
KL2 2009-01-21
  • 打赏
  • 举报
回复
Delphi5的,没有id组件,还可以怎样做?
内容概要:本文系统研究了并网虚拟同步发电机(VSG)的自适应惯量阻尼调控策略及其对频率动态响应稳定性的影响,聚焦于VSG在并网工况下的惯量与阻尼协同自适应控制机制。通过构建Simulink仿真模型并结合Matlab代码实现,深入分析VSG的动态特性、有功/无功功率响应及电网频率稳定性,采用根轨迹法评估不同调节系数对系统稳定性的敏感性,揭示其支撑电网频率稳定的能力。研究进一步拓展至微电网黑启动、预同步控制、虚拟阻抗技术以及双机VSG间的功率精确分配等关键应用场景,旨在应对高比例新能源接入带来的系统惯量下降与频率稳定挑战,提升电力系统的韧性与可靠运行水平。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术背景,熟练掌握Matlab/Simulink仿真工具,从事电气工程、能源互联网、微电网控制等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入探究VSG在并网模式下惯量与阻尼参数的自适应协同调控原理与实现方法;②系统分析VSG控制策略对电网频率动态响应过程的影响规律与稳定边界;③通过仿真实践掌握VSG关键控制参数(如虚拟惯量、阻尼系数)的设计、整定及其对系统性能影响的量化评估;④为微电网的自主黑启动、无缝并网及高渗透率可再生能源系统的频率稳定控制提供先进的技术方案与决策依据。; 阅读建议:建议读者结合文中提供的完整Matlab代码与Simulink模型进行动手仿真实验,重点关注控制策略的模块化设计逻辑、参数动态调整过程与系统整体性能之间的关联,务必结合电力系统小信号稳定性分析理论,深入理解根轨迹、特征值等分析结果所蕴含的物理意义,从而实现从理论到实践的贯通。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧