今天遇到一个字符串的问题.... ( 积分: 50 )

  • 主题发起人 主题发起人 javesun
  • 开始时间 开始时间
J

javesun

Unregistered / Unconfirmed
GUEST, unregistred user!
S: String;
S是由字母和汉字组成的...在运行过程中会出现S:= 'AAA中国?的情况,即最后的一个汉字只保留了一半,我想要做的是,检测S,如果发现上述情况,就把最后的那个半个汉字去掉...
想了一天也没有思路,郁闷死了...
 
if Length(s) > 2 then
if (S[Length(s)] > #160) and (S[Length(s)-1] < #160) then
begin
S:= Copy(S,1,Length(s)-1);
end;
 
for i:=1 to Length(edit.text) do
if edit.text > #160 then
begin
ShowMessage('有双字节字');
break;
end




for i:=1 to Length(s) do
begin
if (ByteType(s, i) = mbLeadByte) or (ByteType(s, i) = mbTrailByte) then
begin
ShowMessage('有双字节字');
exit;
end;
end;
 
用widestring
s:widestring;
 
用循环判断S的各个s的ASCII码值,大于128的ASCII码个数是单数就去掉最后一个就行了
 
同意Kjzzn的说法,用Widestring就不会出现这种问题
 
我也遇到过,用widestring搞定
 
我也试过widestring,但其实际的二进制数有时也会不同,在使用时有报错....
 
楼主是不是在简繁体转换的时候出问题呀:) WideString用两字节保存,一般就可以解决了,
Delphi 在 WideString 转 string 的时候会自动调用api 转换的
 
后退
顶部