请教“汉字双字识别“(100分)

  • 主题发起人 主题发起人 RippleW
  • 开始时间 开始时间
R

RippleW

Unregistered / Unconfirmed
GUEST, unregistred user!
我用IsDBCSLeadByte判断一个字节是否是汉字
procedure TForm1.Button3Click(Sender: TObject);
var
S : String;
PC : PChar;
res : Bool;
i : integer;
begin
S := '你好';
PC := PChar(S);
for i := 0 to 3 do
begin
res := IsDBCSLeadByte(Byte(Pc));
if res = true then
ShowMessage('IsLead')
else
ShowMessage('Not Lead');
end;
end;

每次是Islead
我如何才能当前字节是一个汉字先导字节呢?
 
我如何才能判断当前字节是一个汉字先导字节呢?
 
从这个字符开始向前扫描,直到遇上字符<$128或者字符串到头为止,看
中间有几个字符,为奇数表示当前字符是leadbyte.
 
procedure TForm1.Button1Click(Sender: TObject);
var
S : String;
i : integer;
begin
S := 'a你b好';
i := 1;
while i < Length(s)do
begin
if s in LeadBytes then
begin
ShowMessage(IntToStr(i) + ' is LeadByte!');
Inc(i);
end;
Inc(i);
end;
end;
 
用 ByteType 函数。
 
汉字字符的单个字符的值是有范围的,具体的范围我没有记住,
等我一会儿查一查,还有要注意是那种编码格式,
utf16和utf8是不同的,一般都是utf16,但是utf8的要特别处理.
 
c[iChar] in leadbytes --->双字节
 
ByteType就是我说的做法,只是它使用in leadbytes来判断是否是双字节。
 
To lczhuohuo: >>汉字字符的单个字符的值是有范围的
清详细说明
To DreamTiger : 我现在正在用你说的方法。但在文章中选块操作时,这样太费cpu资源。
Thank All!
 
不论是Big5还是GB2312字符值的范围都在4E00到9FFF之间,
如果统一编码,那么对于所有的字符都会使用两个字节,而前
256个字符,都会在前面加上00来构成双字
 
后退
顶部