to netexplorer: if aChar in LeadByte then // 如果是 LeadByte
to DreamTiger: 如果是中间某个字出现乱码呢?
有一个方法是,先判断一个 Char 是否是合法的 Char
if AChar in ['a'..'z', 'A'..'Z', #32, 等...]
如果是 LeadByte 再判断该汉字是否可以正确显示;
可以在一个 Bitmap.Canvas 上 TextOut,如果该 Bitmap 的像素点颜色都
与背景色相同的话,那么应该可以断定是一个无法显示的汉字。
(多么老土的办法!^_^) 但是无法区分显示出的乱码(如“□”)
我自己有另外一个比较土的办法,只是检查一个字符串里
是否都是合法的汉字,基本上管用,但偶尔会将个别正常的
汉字检查错,需要进一步完善,if 你改好了,请 E-mail 给我,
先谢了!
const
GBMax = '$F7FE';
// '$D7FE'
// '$D7FA'
GBMin = '$B0A1';
function CheckStr(s: string): Boolean;
var
i: Integer;
len: Integer;
chL, ch: Char;
function CheckDBChar(ch1, Ch2: Char): Boolean;
var
s: String;
function GetByteStr(c: Char): String;
begin
Result := EmptyStr;
Result := Format('%x', [Ord(c)]);
end;
begin
//Result := ((Ord(ch1) >= $B0) and (Ord(ch2) >= $A1)) and ((Ord(ch1) <= $F7) and (Ord(ch2) <= $FE));
s := '$' + GetByteStr(ch1) + GetByteStr(ch2);
Result := ((s <= GBMax) and (s >= GBMin)) and ((s > '$D7FE') or (s < '$D7FA'));
end;
begin
Result := True;
len := Length(s);
// 如果长度小于 2 ,肯定不是中文
if len < 2 then begin
Result := False;
Exit;
end;
i := 1;
while i < len do
begin
chL := s;
ch := s[i + 1];
Result := CheckDBChar(chL, ch);
if not Result then
Break;
inc(i, 2);
end;
end;