在显示较长的英汉(含全角字符)混合的字符串时,可能会分割成几个字符串进行显示。每个英文字母或符号的长度是1,而中文或全角字符的长度是2,用substr分割子串时,可能会将一个长度为2中文或全角字符从中间分开,造成显示为乱码(或出现“ ; error: Unknown exception occurred ; warning: unwind skipped on unknown exception”的错误)。 因此,分割这类字串前,有必要分割处是否是中文或全角字符。下面是我在程序中使用的函数: (defun Integrated (str i / lst) (setq lst (vl-string->list (substr str 1 i)) lst (vl-remove-if '(lambda (x) (< x 128)) lst) ) (= 0 (rem (length lst) 2)) ) 函数的作用是:判断字串str的前i个(从1开始计,与substr相同)字符是否完整。完整则返回T,否则返回nil。 这个函数稍作修改可适应自己的情况。 |