一个小问题,怎样把输入的汉字变成该字的标准编码?(100分)

  • 主题发起人 主题发起人 afeng1
  • 开始时间 开始时间
A

afeng1

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样把输入的汉字变成该字的标准编码?或者相反,输入一个标准码,能显示出对应的汉字来
 
delphi:
var n:string;
begin
n:='字';
edit1.Text:=inttostr(word(n[1]))+inttostr(word(n[2]));
end;
 
学习 学习
 
应该是区位码吧,比如大家报水平考试(前年),研究生考试时用2B铅笔涂的姓名编码
 
function QueryCompStr(hKB: HKL;
const sChinese: AnsiString): string;
var
dwGCL: DWORD;
szBuffer: array[0..254] of char;
iMaxKey, iStart, i: integer;
begin
Result := '';
iMaxKey := ImmEscape(hKB, 0, IME_ESC_MAX_KEY, nil);
if iMaxKey <= 0 then
exit;
dwGCL := ImmGetConversionList(hKB,0,pchar(sChinese),nil,0,GCL_REVERSECONVERSION);
if dwGCL <= 0 then
Exit;

dwGCL := ImmGetConversionList(hKB,0,pchar(sChinese),@szBuffer,dwGCL,GCL_REVERSECONVERSION);
if dwGCL > 0 then
begin
iStart := byte(szBuffer[24]);
for i := iStart to iStart + iMaxKey * 2do
AppendStr(Result, szBuffer);
end;
end;

这个你看是不是?
 
把汉字转化为区位码:
function HZBM(source:string):string;
var
i:integer;
b:boolean;
begin
b:=true;
for i:=1 to length(source)do
begin
if ord(source)>160 then
begin
b:=not b;
result:=result+format('%.2d', [ord(source)-160]);
end else
result:=result+'*';
if b then
result:=result+' ';
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text:=HZBM(edit1.text);
end;

end.
 
// 区位码转汉字
function BM2HZ(source:string):string;
var
i,j:integer;
s:string;
begin
source:=trim(source)+' ';
while pos(' ',source)>0do
begin
s:=copy(source,1,pos(' ',source)-1);
if length(s)<4 then
result:=result+chr(strtointdef(s,0))
else
begin
j:=1;
while j<length(s)do
begin
i:=strtoint(copy(s,j,2));
result:=result+chr(i+160);
inc(j,2);
end;
end;
source:=trimleft(copy(source,pos(' ',source)+1,length(source)-pos(' ',source)));
end;
end;

// 汉字转区位码
function HZ2BM(source:string):string;
var
i:integer;
b:boolean;
begin
b:=true;
for i:=1 to length(source)do
begin
if ord(source)>160 then
begin
b:=not b;
result:=result+format('%.2d', [ord(source)-160]);
end else
result:=result+inttostr(ord(source));
if b then
result:=result+' ';
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text:=HZ2BM(edit1.text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
edit3.text:= BM2HZ(edit2.text);
end;

end.
 
非常感谢大家的热情参与,不过我不会DELPHI,能不能用C++来写,或者说明一下
 
对不起,是国标码
 
就是,如果是'国标码',那有点复杂,因为'国标码'和'内码'不完全相同,
因为要和ascii码区分,就在每个字节(或两个字节的前一字节的)最高位置1.
('国标码'只是国家指定的标准编码,但实际用到计算机中有一点点改动,此时称'内码')
理论上将只要把每个字节最高位清0就可以由'内码'(在计算机中保存的就是它)得到
'国标码',但是从'国标码'得到'内码'就不好办了,因为不是所有的字节都应该最高位为1.
如果只是想实现'汉字'->'内码' &amp;
'内码'->'(显示成的)汉字',好办.
楼主,请问需要您需要什么样的?一定要'国标码'吗?
 

Similar threads

D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
831
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部