关于获得汉字拼音首位字母的函数在delphi2010无效,该怎么处理
关于获得汉字拼音首位字母的函数在delphi2010无效
这段代码在delphi7有效,在Delphi2010为什么会无效?谢谢!
Function TForm1.getpy(hzchar:string):char;//获得汉字拼音首位字母的函数
begin
case word(hzchar[1]) shl 8+word(hzchar[2]) of
$B0A1..$B0C4:RESULT:='A';
$B0C5..$B2C0:RESULT:='B';
$B2C1..$B4ED:RESULT:='C';
$B4EE..$B6E9:RESULT:='D';
$B6EA..$B7A1:RESULT:='E';
$B7A2..$B8C0:RESULT:='F';
$B8C1..$B9FD:RESULT:='G';
$B9FE..$BBF6:RESULT:='H';
$BBF7..$BFA5:RESULT:='J';
$BFA6..$C0AB:RESULT:='K';
$C0AC..$C2E7:RESULT:='L';
$C2E8..$C4C2:RESULT:='M';
$C4C3..$C5B5:RESULT:='N';
$C5B6..$C5BD:RESULT:='O';
$C5BE..$C6D9:RESULT:='P';
$C6DA..$C8BA:RESULT:='Q';
$C8BB..$C8F5:RESULT:='R';
$C8F6..$CBF9:RESULT:='S';
$CBFA..$CDD9:RESULT:='T';
$CDDA..$CEF3:RESULT:='W';
$CEF4..$D188:RESULT:='X';
$D1B9..$D4D0:RESULT:='Y';
$D4D1..$D7F9:RESULT:='Z';
else
RESULT:=char(32);
end;
end;
------解决方案--------------------
这段代码在delphi7有效,在Delphi2010为什么会无效?谢谢!
Function TForm1.getpy(hzchar:string):char;//获得汉字拼音首位字母的函数
begin
case word(hzchar[1]) shl 8+word(hzchar[2]) of
$B0A1..$B0C4:RESULT:='A';
$B0C5..$B2C0:RESULT:='B';
$B2C1..$B4ED:RESULT:='C';
$B4EE..$B6E9:RESULT:='D';
$B6EA..$B7A1:RESULT:='E';
$B7A2..$B8C0:RESULT:='F';
$B8C1..$B9FD:RESULT:='G';
$B9FE..$BBF6:RESULT:='H';
$BBF7..$BFA5:RESULT:='J';
$BFA6..$C0AB:RESULT:='K';
$C0AC..$C2E7:RESULT:='L';
$C2E8..$C4C2:RESULT:='M';
$C4C3..$C5B5:RESULT:='N';
$C5B6..$C5BD:RESULT:='O';
$C5BE..$C6D9:RESULT:='P';
$C6DA..$C8BA:RESULT:='Q';
$C8BB..$C8F5:RESULT:='R';
$C8F6..$CBF9:RESULT:='S';
$CBFA..$CDD9:RESULT:='T';
$CDDA..$CEF3:RESULT:='W';
$CEF4..$D188:RESULT:='X';
$D1B9..$D4D0:RESULT:='Y';
$D4D1..$D7F9:RESULT:='Z';
else
RESULT:=char(32);
end;
end;
------解决方案--------------------
- Delphi(Pascal) code
function getpy(hzchar: AnsiString): Char; begin case word(hzchar[1]) shl 8 + word(hzchar[2])of $B0A1..$B0C4: Result := 'A'; $B0C5..$B2C0: Result := 'B'; $B2C1..$B4ED: Result := 'C'; $B4EE..$B6E9: Result := 'D'; $B6EA..$B7A1: Result := 'E'; $B7A2..$B8C0: Result := 'F'; $B8C1..$B9FD: Result := 'G'; $B9FE..$BBF6: Result := 'H'; $BBF7..$BFA5: Result := 'J'; $BFA6..$C0AB: Result := 'K'; $C0AC..$C2E7: Result := 'L'; $C2E8..$C4C2: Result := 'M'; $C4C3..$C5B5: Result := 'N'; $C5B6..$C5BD: Result := 'O'; $C5BE..$C6D9: Result := 'P'; $C6DA..$C8BA: Result := 'Q'; $C8BB..$C8F5: Result := 'R'; $C8F6..$CBF9: Result := 'S'; $CBFA..$CDD9: Result := 'T'; $CDDA..$CEF3: Result := 'W'; $CEF4..$D188: Result := 'X'; $D1B9..$D4D0: Result := 'Y'; $D4D1..$D7F9: Result := 'Z'; else Result := Char(32); end; end;
------解决方案--------------------
汉字的unicode编码和ansi编码都是2字节,可是内容不一样?我上面发的自己测试过,绝对是可以的。
------解决方案--------------------
我在delphi2010下测试一下,首先可以肯定的是一定要用AnsiString,因为2010下String是WideString它是unicode的,#5楼的程序基本没问题,但只支持GBK的一级汉字,所以LZ说返回空值.
对于常用的汉字,#5楼的可以,但二级字库或unicode中的某些汉字,就不能用了