delphi返回一个汉字的Unicode编码
比如“我“对应的是Unicode编码是52946,按Alt+52946就能打出来是“我”字因为D7和后续版本的不同,最好能够分开来写(用D7以后的版本写出的再加10分)...
比如“我“对应的是Unicode编码是52946,按Alt+52946就能打出来是“我”字
因为D7和后续版本的不同,最好能够分开来写(用D7以后的版本写出的再加10分) 展开
因为D7和后续版本的不同,最好能够分开来写(用D7以后的版本写出的再加10分) 展开
3个回答
展开全部
‘我’的unicode编码并非52946,而是25105,即U+6211,52946是GBK编码,做亩即没滚$CED2
在delphi的高版本中缺省使用Unicode,因此用Chinese2MacCode_返回的是Unicode编码25105,如果想返回52946,把字符串转纯察森为ansistring就行了。
在delphi的高版本中缺省使用Unicode,因此用Chinese2MacCode_返回的是Unicode编码25105,如果想返回52946,把字符串转纯察森为ansistring就行了。
追问
多谢了,U+6211不懂,请问GBK编码和Unicode之间有通用的关系式吗?
追答
U+6211是Unicode码的表示,意思是Unicode编码为16进制6211的字符。
GBK和Unicode之间编码不同,需要用转码函数转。用Ultraedit软件可以方便的看一个字符的编码是什么,也可以实现GBK和Unicode之间的相互转换。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-12-06 · 知道合伙人软件行家
关注
展开全部
//机内码 -> 汉字
Function MacCode2Chinese(AiUniCode : Integer) : String;
Var
ch, cl : Integer;
Begin
ch := AiUniCode Div 256;
cl := AiUniCode Mod 256;
Result := Chr(ch) + Chr(cl);
end;
//汉字迟银 -> 机内码
Function Chinese2MacCode(AiChinese : String) : Integer;
Var
ch, cl : Integer;
Begin
ch := Ord(AiChinese[1]);
cl := Ord(AiChinese[2]);
Result := (ch shl 8) + cl;
end;
//码旦亏迟神UniCode -> 汉字
Function UniCode2Chinese(AiUniCode : Integer) : String;
Var
ch, cl : String[3];
s : String;
Begin
s := IntToHex(AiUniCode, 2);
cl := '$' + Copy(s, 1, 2);
ch := '$' + Copy(s, 3, 2);
s := Chr(StrToInt(ch)) + Chr(StrToInt(cl)) + #0;
Result := WideCharToString(pWideChar(s));
end;
//汉字 -> UniCode
Function Chinese2UniCode(AiChinese : String) : Integer;
Var
ch, cl : String[2];
a : array [1..2] of char;
Begin
StringToWideChar(Copy(AiChinese, 1, 2), @(a[1]), 2);
ch := IntToHex(Integer(a[2]), 2);
cl := IntToHex(Integer(a[1]), 2);
Result := StrToInt('$' + ch + cl);
end;
Function MacCode2Chinese(AiUniCode : Integer) : String;
Var
ch, cl : Integer;
Begin
ch := AiUniCode Div 256;
cl := AiUniCode Mod 256;
Result := Chr(ch) + Chr(cl);
end;
//汉字迟银 -> 机内码
Function Chinese2MacCode(AiChinese : String) : Integer;
Var
ch, cl : Integer;
Begin
ch := Ord(AiChinese[1]);
cl := Ord(AiChinese[2]);
Result := (ch shl 8) + cl;
end;
//码旦亏迟神UniCode -> 汉字
Function UniCode2Chinese(AiUniCode : Integer) : String;
Var
ch, cl : String[3];
s : String;
Begin
s := IntToHex(AiUniCode, 2);
cl := '$' + Copy(s, 1, 2);
ch := '$' + Copy(s, 3, 2);
s := Chr(StrToInt(ch)) + Chr(StrToInt(cl)) + #0;
Result := WideCharToString(pWideChar(s));
end;
//汉字 -> UniCode
Function Chinese2UniCode(AiChinese : String) : Integer;
Var
ch, cl : String[2];
a : array [1..2] of char;
Begin
StringToWideChar(Copy(AiChinese, 1, 2), @(a[1]), 2);
ch := IntToHex(Integer(a[2]), 2);
cl := IntToHex(Integer(a[1]), 2);
Result := StrToInt('$' + ch + cl);
end;
追问
在delphi7下,前两个是对的。
函数Chinese2UniCode('我') 在delphiXE2下期望返回的也是52946,可是返回的却是98,在delphi7下返回的是25105。
有意思的是delphi XE2下:
Function Chinese2MacCode_(AiChinese : String) : Integer;
Var
ch, cl : Integer;
Begin
ch := Ord(AiChinese[1]);
cl := Ord(AiChinese[2]);
Result := ch + cl;
end;
返回的也是25105
希望大侠写一个在delphiXE等高版本下"我"字也能返回52946的函数
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
汉字与 Unicode 转换
//转换
function Str_Gb2UniCode(text: string): String;
var
i,len: Integer;
cur: Integer;
t: String;
ws: WideString;
begin
Result := '';
ws := text;
len := Length(ws);
i := 1;
while i <前虚= len do
begin
cur := Ord(ws[i]);
FmtStr(t,'%4.4X',[cur]);
Result := Result + t;
Inc(i);
end;
end;
//恢复
function Unicode_str(text: string):string;
var
i,len: Integer;
ws: WideString;
begin
ws := '';
i := 1;
len := Length(text);
while i < len do
begin
ws := ws + Widechar(StrToInt('$' + Copy(text,i,4)));
i := i+4;
end;
Result := ws;
end;
//测试慧信燃
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Str_Gb2UniCode('万一')); //4E074E00
ShowMessage(Unicode_str('4E074E00')); //万一
end;
引用万一坦悄博客
//转换
function Str_Gb2UniCode(text: string): String;
var
i,len: Integer;
cur: Integer;
t: String;
ws: WideString;
begin
Result := '';
ws := text;
len := Length(ws);
i := 1;
while i <前虚= len do
begin
cur := Ord(ws[i]);
FmtStr(t,'%4.4X',[cur]);
Result := Result + t;
Inc(i);
end;
end;
//恢复
function Unicode_str(text: string):string;
var
i,len: Integer;
ws: WideString;
begin
ws := '';
i := 1;
len := Length(text);
while i < len do
begin
ws := ws + Widechar(StrToInt('$' + Copy(text,i,4)));
i := i+4;
end;
Result := ws;
end;
//测试慧信燃
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Str_Gb2UniCode('万一')); //4E074E00
ShowMessage(Unicode_str('4E074E00')); //万一
end;
引用万一坦悄博客
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询