%0D%0A%C7 转换成汉字。(200分)

  • 主题发起人 主题发起人 程云
  • 开始时间 开始时间

程云

Unregistered / Unconfirmed
GUEST, unregistred user!
%0D%0A%C7%E0%B7%E5%B8%A1%D4%C6%B9%FD%A3%AC%0D%0A%B5%B6%BD%A3%D4%C2%CF%C2%B8%E8
%A1%A3%0D%0A%D2%BB%C9%F9%B3%A4%D0%A5%C9%BD%D2%B0%D5%F0%A3%AC%0D%0A%CF%C0%CA%BF
%C2%B7%D0%D0%B6%E0%A1%A3+%0D%0A%0D%0A%BB%D8%CA%D7%D2%D1%CA%C7%B2%D4%C9%BD%D4%B6
%A3%AC%0D%0A%D5%F7%CD%BE%C2%FE%C3%BB%C3%BB%A1%A3+%0D%0A%0D%0A%BC%C5%D2%B9%CE%CA
%B9%C2%D0%C7%A3%AC%0D%0A%BD%A3%B6%C0%C7%EF%B7%E7%BA%CD%A3%AC%0D%0A%B5%AB%D4%B8
%C0%B4%BB%D8%C7%A7%B0%D9%B4%CE%A3%AC%0D%0A%BA%AE%D4%C2%D3%EB%CE%D2%CD%AC%BC%C5
%C4%AF%A1%A3%0D%0A

上面这是一段文字,我怎么把它们转化成汉字呢?
 
procedure TForm1.Button2Click(Sender: TObject);
var
s,s2:string;
i,n:integer;
begin
s:='%0D%0A%C7%E0%B7%E5%B8%A1%D4%C6%B9%FD%A3%AC%0D%0A%B5%B6%BD%A3%D4%C2%CF%C2%B8%E8';
n:=length(s) div 3;
s2:='';
for i:=1 to n do s2:=s2+char(strtoint('$'+copy(s,3*i-1,2)));
showmessage(widestring(s2));
showmessage(s2); //不进行类型转换也可以
end;
 
青峰浮云过,
刀剑月下歌
 
把你文字里面的“+”去掉先:

青峰浮云过,
刀剑月下歌。
一声长啸山野震,
侠士路行多。

回首已是苍山远,
征途漫没没。

寂夜问孤星,
剑独秋风和,
但愿来回千百次,
寒月与我同寂寞。
 
前天刚刚有人也要这样的函数,写了一个,顺便贴上来给你。
不用去掉+号,URL编码

function HexToInt(const Value: String): Integer;
function aHexToInt(c:char): Integer;
begin
case c of
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9': Result := StrToInt(c);
'A': result := 10;
'B': result := 11;
'C': result := 12;
'D': result := 13;
'E': result := 14;
'F': result := 15;
else result := -1;
end;
end;

var s : string;
i: integer;
begin
if length(Value) <>2 then Result := -1;
s := Uppercase(Value);

if (aHexToInt(s[1])>=0) and (aHexToInt(s[2])>=0) then
Result := aHexToInt(s[1]) *16 + aHexToInt(s[2])
else
Result := -1;
end;


procedure TForm1.Memo2Change(Sender: TObject);
var
sSource, sDest, s1: String;
i, iR: Integer;
begin

sSource := Memo2.Lines.Text;
sDest := '';

i := 1;
while i <= Length(sSource) do
begin
if (sSource = '%') and (i<>Length(sSource)) then
begin
s1 := Copy(sSource, i+1, 2);
iR := HexToInt(s1);
if iR in [1..255] then
begin
sDest := sDest + Char( iR );
inc(i,2);
end
else
sDest := sDest + sSource;
end
else
sDest := sDest + sSource;

Inc(i);
end;

Memo1.Lines.Text := sDest;
 
+ 应该转换为"空格"
在ASP应该有专门的函数来转换.
 
凑凑热闹:)
var
r:string;
i:=0;
while 字符串没结束 do
begin
1. 在字符串查找下一个%
2. 将找到的%替换为$
3. $与%后面的两个字符一起转成byte
4. i:=i+1;将byte地址中的值拷到r地址中
end;
showmessage(r);
 
是不是取了URL分析啊,十六进制TO十进制啊。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
644
import
I
I
回复
0
查看
876
import
I
后退
顶部