关于在DELPHI中将unicode码转成中文字符的问题(50分)

  • 主题发起人 主题发起人 rob
  • 开始时间 开始时间
R

rob

Unregistered / Unconfirmed
GUEST, unregistred user!
众所周知,一个ASCII字符是由一个字节表示,UNICODE码字符是由两个字节表示一个字符
在ASCII码中,我们可以利用函数chr(),ord()来进行字符跟ASCII码的转换
如:chr(65)返回'A',ord('A')返回65,在ASCII吗中只能处理英文不能处理中文
但是在UNICODE码中,怎么进行类似的转换,有什么类似的函数吗
从而实现将中文转成unicode双字节码,再通过双字节码转回中文
请高手指点,最后能举个例子不胜感激........
 
用WideString类型就行了,可以跟String类型隐式转换(直接用 :=)
 
你需要的是这样的函数吧?
function AnsiToUnicode(Ansi: string):string;
var
s:string;
i:integer;
j,k:string[2];
a:array [1..1000] of char;
begin

s:='';
StringToWideChar(Ansi,@(a[1]),500);
i:=1;
while ((a<>#0) or (a[i+1]<>#0)) do
begin

j:=IntToHex(Integer(a),2);
k:=IntToHex(Integer(a[i+1]),2);
s:=s+k+j;
i:=i+2;
end;

Result:=s;
end;

附上反编码的函数
function ReadHex(AString:string):integer;
begin

Result:=StrToInt('$'+AString)
end;

function UnicodeToAnsi(Unicode: string):string;
var
s:string;
i:integer;
j,k:string[2];
begin

i:=1;
s:='';
while i<Length(Unicode)+1 do
begin

j:=Copy(Unicode,i+2,2);
k:=Copy(Unicode,i,2);
i:=i+4;
s:=s+Char(ReadHex(j))+Char(ReadHex(k));
end;

if s<>'' then

s:=WideCharToString(PWideChar(s+#0#0#0#0))
else

s:='';
Result:=s;
end;

根据你的需要进行改动就可以了。

 
dnil兄我试过了,用widestring类型的变量,没有将中文转出来
或许是我设的不对,能给个例子吗谢谢!!
 
我的转换函数和Vine的类似
function Encode_cn(var s: WideString): string;
var
i, len: Integer;
cur: Integer;
t: string;
begin
Result := '';
len := Length(s);
i := 1;
while i <= len do
begin
cur := ord(s);
//BCD转换
FmtStr(t, '%4.4X', [cur]);
Result := Result + t;
inc(i);
end;
end;

function Decode_cn(MSG: string): WideString;
var i, j, len, Cur: Integer;
twideChar: integer;
begin
try
i := Length(MSG) mod 4;
if i <> 0 then
begin
for j := 1 to 4 - i do
MSG := MSG + '0';
end;
Len := Length(MSG) div 4;
SetLength(Result, Len);
Result := '';
for i := 1 to Len do
begin
tWideChar := StrToInt('$' + Copy(MSG, 1 + (i - 1) * 4, 4));
Result := Result + WideChar(tWideChar);
end;
except
Result := '';
end;
end;
 
谢谢我已经试出来了
 
后退
顶部