史上最怪的代码,这又是au3的bug还是什么,怪!真怪!!实在太怪了!!!
本帖最后由 binghc 于 2012-5-23 11:21 编辑测试文本:累计:16元
特别声明:一定要对用复制的方式,把测试字符串放入剪贴板
代码不能正常运行:
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+(?= *元)',3)
_ArrayDisplay($list)
而这样写却正常:
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+(?= *元)',3)
_ArrayDisplay($list)
;无
这样也正常:
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+',3)
_ArrayDisplay($list)
我用的版本是3.3.7.15
这是怎么回事,太怪了!! 3.3.9.0版本也同样有这个现象啊。 果然如此,不过之前好像有人提过类似的问题 而且大家可以试试,这个注释“无”如果换成其他文字还不行!! 回复 4# binghc
换成其他中文都可以
其实编译器已经给出了信息:
! ***************************************************************************************************************
! * 输入的文件使用 UTF8 编码(无BOM), Au3Check/Obfuscator 并不支持 UNICODE 编码,且不会执行.. *
! * The file SHOULD BE encoded as UTF8 with BOM to continue processing by AutoIT3Wrapper. *
! * ##################################################################################################### *
! * ##### AutoIt3Wrapper will not show a GUI or update the script to avoid any damage to your scriptfile. ##### *
! * ##################################################################################################### *
! * When your file isn't a UTF8 file without BOM then please report this to me for review. *
! *************************************************************************************************************** 本帖最后由 binghc 于 2012-5-23 13:54 编辑
回复 5# user3000
既然编译器都这么说了,看来au3也像python也一样对文件编码要求比较严格,不过这又怎么解释:
源码中包含中文,编译器报错,可以解释
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+元',3)
_ArrayDisplay($list)
但是为什么,再加点中文注释编译器又不报这样的错了
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+元',3)
_ArrayDisplay($list)
;中文
本帖最后由 binghc 于 2012-5-23 14:01 编辑
回复 5# user3000
同样包含中文,这样就没问题,why?
#include<array.au3>
$str=StringRegExp(ClipGet(),'中文\V*',3)
_ArrayDisplay($str)
编译器说utf8编码不行,如果上面不是utf8编码能运行,那这样写就utf8编码了?
#include<array.au3>
$list=StringRegExp(ClipGet(),'[.\d]+(?= *元)',3)
_ArrayDisplay($list)
其实是编码缺陷的问题,如果字符不足以识别编码格式时就会出现这个问题,解决这问题有两个方法
1.加入BOM
2.有足够的字符判断编码
请测试以下例子:
新建 1.txt 2.txt并分别用系统记事本打开
一个输入 移动 一个输入 联通 (注意只输入这两个字,不能有换行或其它字符)保存退出,再打开你会发现联通被打败了~~~~~~~~~~~~~~ 回复 8# Qokelate
对au3的了解又深入了一些,哥们,加入BOM?怎么加呀
要足够多的字符,多少才算足够啊? 本帖最后由 binghc 于 2012-5-23 14:19 编辑
回复 8# Qokelate
额…还有,我用afan的测试工具都没发现这些问题啊 本帖最后由 Qokelate 于 2012-5-23 14:25 编辑
回复 9# binghc
1.改变编码格式(有些编辑器可以直接设定BOM)可以修改对应BOM
2.BOM是可选的,但有BOM就可以避免出现误识别情况
3.把第一行设成空行可一定程度解决误识别
4.字符不在多,只要不是"敏感字符"开始就行 (请百度BOM) 常用的编辑器都一定程度存在这问题
所以,打开文本时指定编码格式是最好的方法 回复 12# Qokelate
我先用txt文件,把代码保存成ANSI编码,然后再改扩展名还是不行啊 回复 7# binghc
此AU3版本, 没有完全正确翻译该出错信息, 应该是不支持不带BOM的UTF-8编码
我还百度了一下 BOM (别笑, 以前都不把这当一回事的):
BOM —— Byte Order Mark,中文名译作“字节顺序标记”
事实上, 是'元' 字惹的祸, 使脚本遭到'误杀', 1楼中放出的第1段代码, 随便用任意汉字代替'元'字, 脚本应该都能正常运行! (我只试了几个别的汉字, 以此推断) 本帖最后由 binghc 于 2012-5-23 14:40 编辑
回复 14# user3000
如果是跟这个“元”是罪魁祸首,那为什么加了中文注释又没问题了?!
页:
[1]
2