个人理解是因为StringFormat统计字符数时一个汉字为一个字符,但汉字在显示时一个汉字占两个英文字符的宽带,就导致有汉字的句子输出后变长的情况,所以格式控制时的宽度应先减掉汉字数,如下:
Local $S1="无标题 - 新建记事本"
Local $S2="(未命名文档) * SciTE(ACN) [1 of 2]"
Local $S3="http://www.autoitscript.com/ - Windows Internet Explorer"
Local $S4="43951789.0000"
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S1)&"s]",$S1) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S2)&"s]",$S2) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S3)&"s]",$S3) & @CRLF)
ConsoleWrite(StringFormat("[%-"&56-CHNnum($S4)&"s]",$S4) & @CRLF)
Func CHNnum($sData)
$sCHN = StringRegExpReplace($sData, "[\x00-\xFF]", "")
Return StringLen($sCHN)
EndFunc
|