2009-05-31
Delphi 对汉字字符串的截取问题
关键字: delphi 汉字 截取
在Delphi中,用Length来取字符长度时,会将汉字当成两个字节来计算,Copy把汉字当成两个来处理,可能截取半个汉字,那我们如何知道是否取的是汉字呢?是否把一个汉字取完整了呢?
其实,可以用ByteType对取出来的字符进行判断是一个单字符还是汉字的一部分!
mbLeadByte: 汉字的第一个字节
mbTrailByte: 汉字的第二个字节
mbSingleByte: 单个的字符,不是中文字符。
如果Copy出来的是汉字的第一个字节,就再多(或少)Copy一个,凑成完整的汉字。
如下例:
function GetText(strtxt:string;iLen:integer):string;
begin
//先判断要截取的字符串最后一个字节的类型
//如果为汉字的第一个字节则减(加)一位
if ByteType(strtxt,iLen) = mbLeadByte then
iLen := iLen - 1;
result := copy(strtxt,1,iLen) + "...";
end;
http://feirou520.iteye.com/blog/340323
2009-02-27
delphi 判断字符为中文
关键字: delphi 判断字符为中文
function ByteType(const S: string; Index: Integer): TMbcsByteType;
告诉你一个非常有用的函数。
bytetype 它可以判断一个字符串中,某个 Char 是单个字母,还是双字节的前一位或
后一位。
mbSingleByte 单字母
mbLeadByte 双字节第一位
mbTrailByte 双字节第二位
procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
s : string;
begin
s := '请问1<2吗';
for i := 1 to length(s) do
begin
if ByteType(s,i) = mbSingleByte then
ShowMessage(s + ' 的第' + inttostr(i) + '个字符是西文')
else
ShowMessage(s + ' 的第' + inttostr(i) + '个字符是中文');
end;
end;