delphi 汉字的编码 转换  

2009-10-07 21:57:00|  分类: delphi |  标签: |字号 订阅

 
 

 

 

 

━━━━━━━━━━━━━━━━━━━━━━━━━━

var

Str:String;

begin

Str:='张';

Caption:=IntToHex(PWord(@Str[1])^,4);

end;

━━━━━━━━━━━━━━━━━━━━━━━━━━

这样也行

a:='我';

caption:=IntToStr(ord(a[1]))+IntToStr(ord(a[2]));

━━━━━━━━━━━━━━━━━━━━━━━━━━

Caption:=IntToHex(PWord(@Str[1])^,4);

   得到的是16进制的代码

caption:=IntToStr(ord(a[1]))+IntToStr(ord(a[2]));

得到的是10进制的代码!

不过好像应该是IntToStr(ord(a[2]))+IntToStr(ord(a[1])); 换一下位置!

━━━━━━━━━━━━━━━━━━━━━━━━━━

汉字就是unicode,delphi里面有widestring类型,可以立即使用

var

s: widestring;

i: integer;

begin

s := 'I am 中国人';

for i := 1 to length(s) do

    showmessage(inttostr(ord(s[i])));

end;

标准的写法,韩文,日文都可以这样处理。

━━━━━━━━━━━━━━━━━━━━━━━━━━

要比较汉字, 你只要将这两个字节一一对比, 两个字节都相同,当然是一个汉字了。

一个汉字由两个字节组成,要判断连续的两个字节是否汉字,

关键是看其第一个字节是否满足 >=$a0 条件, 这个条件对GBK汉字都适用

而如果一个汉字是GB2312中定义的最常用的6763个汉字,

则第一个字节和第二个节字都必须满足>=$a0 条件的条件

showmessage(chr($CB)+chr($CE)); //显示 宋 字

宋字的区位码是: 4346

宋字的国标码是: CBCE    (16进制)

另外来几个

showmessage(chr($B5)+chr($CB)); //显示 邓 字

showmessage(chr($D0)+chr($A1)); //显示 小 字

showmessage(chr($C6)+chr($BD)); //显示 平 字

━━━━━━━━━━━━━━━━━━━━━━━━━━

to tosleep:

uses widechar(ord(s[i]))

simple example:

var

c1: widechar;

c2: widechar;

i: integer;

s: widestring;

begin

s := '汉';

c1 := s[1];

i := ord(c1);

c2 := widechar(i);

showmessage(c2);

end;

奇怪上面个别人的发言,windows和delphi都已经有了对unicode的支持,为什么不用呢?

━━━━━━━━━━━━━━━━━━━━━━━━━━

【delphi类型转换 asc与char】

ord(char) = asc

chr(asc) = char

inttohex(int,1) = hex (string)

使用AStr[i]取AStr:String中的第i个字符时需要注意的事项:

这里i表示第i个字符,并不是通常的0表示第1个,i表示第i+1个。

posted on 2014-03-27 22:12  hcwp  阅读(1909)  评论(0编辑  收藏  举报