如何拆分汉字(100分)

  • 主题发起人 主题发起人 wzgss
  • 开始时间 开始时间
W

wzgss

Unregistered / Unconfirmed
GUEST, unregistred user!
我要拆一个字符串,超过一定长度就要拆开,例如:
var
S1:string;
b:Byte;
begin
S1:='大,';
caption :=IntToStr(ord(s1[1]))+':'+IntToStr(ord(s1[2]))
+':'+IntToStr(ord(s1[3]));
end;
它们的asci吗可以知道,但拆开后又不能出现乱吗,就是如何判断两个字节就是
一个汉字,另两个相邻的字节组合就不是汉字。
 
Result:=UserName;
if Length(UserName)>ShowNameLength then
begin
Case ByteType(UserName,ShowNameLength) of
mbSingleByte:
Result:=Copy(UserName,1,ShowNameLength);
mbLeadByte:
Result:=Copy(UserName,1,ShowNameLength-1);
mbTrailByte:
Result:=Copy(UserName,1,ShowNameLength);
end;
end;
 
用WIDESTRING
遇到汉字一个CHAR是两个字节,非汉字字母或符号一个CHAR又是一个字节
 
漢字的第一個字節大於128。以下是我的一個函數,供參考:
function FormatCaption(CaptionStr: string = 'Unknown Application'; FirstLines: integer = 10): string;
var
s1, s2: string;
i, iCount: integer;
isChar: Boolean;
begin
s1 := '';
s2 := '';
isChar := False;
iCount := length(CaptionStr);
for i := 1 to iCount do
begin
if i <= FirstLines then
begin
if Integer(CaptionStr) < 128 then isChar := not isChar;
s1 := s1 + CaptionStr;
if (i = FirstLines) and isChar then
s1 := S1 + CaptionStr[FirstLines + 1];
end
else
begin
if isChar then
begin
if i < iCount then
s2 := s2 + CaptionStr[i + 1];
end
else
s2 := s2 + CaptionStr;
end;
end;
Result := s1 + chr(13) + s2;
end;

 
汉字的ASC吗大于128,凡是大于128的字节都作双字节处理,即可.
 
要阻止不出现乱码,你只要保证你的字符(不管是汉字还是字母)是
在全角状态下输入的即可。
 
后退
顶部