yuxw 发表于 2013-12-4 20:39:05

stringlen统计中英文字符串长度

Local $len = StringLen("我的脚本a")
MsgBox(4096, "字符串长度为:", $len)

结果为5,为什么不是9?如何按一个汉字为两个字符计算?

afan 发表于 2013-12-4 20:47:15

Local $str = "我的脚本a"
Local $len = StringLen(StringRegExpReplace($str, '[^\x00-\xff]', ''))
MsgBox(0, StringLen($str), $len)

annybaby 发表于 2013-12-4 23:45:19

a大的方法不错,转二进制也可以..效率也还挺快的

$str = 'au3中文论坛!'
MsgBox(0, '', BinaryLen(StringToBinary($str)))
$file = FileRead('C:\Users\Administrator\Desktop\imgUrlList - 副本.txt')
$tm = TimerInit()
$len = BinaryLen(StringToBinary($file))
MsgBox(0, $len, TimerDiff($tm))

$tm = TimerInit()
$len = StringLen(StringRegExpReplace($file, '[^\x00-\xff]', ''))
MsgBox(0, $len, TimerDiff($tm))

vuivui 发表于 2013-12-5 09:38:32

对“字符串”来说应该计算二进制数据大小,对文件来说还应考虑编码采用的是ANSI、UTF-8还是UNICODE。

yuxw 发表于 2013-12-5 10:43:26

本帖最后由 yuxw 于 2013-12-5 10:48 编辑

谢谢各位。看来我的问题描述简单了。再补充一下:
两段文本,中、英、数混合:
|长文本0 |长文本1      |长文本2      |
|序号3172|222放大22:lll|33333:44|44444|
想根据第一行|的位置,把下面一行的相应的|线去掉。

想取出第一行的|位置,再与第二|位置对应,对应的上则去掉,否不处理。但是遇到的问题是autoit里汉字做为一个字符计算,实际能对应上的位置就不确定了。
页: [1]
查看完整版本: stringlen统计中英文字符串长度