关于汉字区位码的问题(100分)

  • 主题发起人 主题发起人 xueblueice
  • 开始时间 开始时间
X

xueblueice

Unregistered / Unconfirmed
GUEST, unregistred user!
1、怎么在Delphi中获得汉字的区位码。
2、怎么从区位码转成汉字
 
这个可以吧?
procedure StrToASCII;
var
User: string;
i, j: Integer;
begin
User := '测试123';
for i := 0 to Length(User) - 1 do
begin
j := ord((pchar(user) + i)^);
Form1.Caption := Form1.Caption + IntToHex(j, 2);
end;
end;
反过来就是使用Chr了。
 
没理解错的话是从字库中取吧
有国标,按区位查
 
一个汉字是由两个字节组成,要判断连续的两个字节是否汉字,
关键是看其第一个字节是否满足 >=$a0 条件, 这个条件对GBK汉字都适用
而如果一个汉字是GB2312中定义的最常用的6763个汉字,
则第一个字节和第二个节字都必须满足>=$a0 条件的条件
内码转区位码, 每个字节减去0xa0再sprintf格式输出即可
区位码转汉字, 则是反过来, 将区位分别加上0xa0输出到string或者字符数组即可。

showmessage(chr($CB)+chr($CE));
//显示 宋 字
宋字的区位码是: 4346 宋字的内码是: CBCE (16进制)

nToLen := length(Form1.combobox1.Text);
k :=1;
while k <nToLen do
begin
stemp:=copy(Form1.combobox1.Text,k,2);
if (ord(stemp[1])<$a0) then
begin
Form1.label1.Caption :=sTemp;
Form1.label2.Caption :='不是汉字,请输入汉字';
exit;
end;





 
procedure TForm1.Button1Click(Sender: TObject);
var
s, s1: String;
I: iNTEGER;
begin
s := 'B4F3B8BBCECCC2DBCCB3';
S1 := '';
for i := 0 to length(s) div 2 - 1 do
begin
S1 := S1 + Chr(StrToInt('$' + Copy(S, i * 2 + 1, 2)));
Memo1.Lines.Add(Copy(S, i * 2 + 1, 2));
end;
ShowMessage(s1);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
User: string;
i, j: Integer;
begin
User := '大富翁论坛';
for i := 0 to Length(User) - 1 do
begin
j := ord((pchar(user) + i)^);
Memo1.Lines.Add(IntToHex(j, 2));
end;

end;
 
问题就是:
用这个方法(UP)读取字库(hzx16矩形点阵库)时和同事用VB写的代码计算结果不一样,
总差那么一点点(200~500),
各位大虾是什么原因?
 
多人接受答案了。
 
后退
顶部