binghc 发表于 2012-5-23 11:12:17

史上最怪的代码,这又是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

这是怎么回事,太怪了!!

shqf 发表于 2012-5-23 11:54:38

3.3.9.0版本也同样有这个现象啊。

kevinch 发表于 2012-5-23 12:04:34

果然如此,不过之前好像有人提过类似的问题

binghc 发表于 2012-5-23 12:07:51

而且大家可以试试,这个注释“无”如果换成其他文字还不行!!

user3000 发表于 2012-5-23 12:12:58

回复 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:53:47

本帖最后由 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 13:59:02

本帖最后由 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)

Qokelate 发表于 2012-5-23 14:13:20

其实是编码缺陷的问题,如果字符不足以识别编码格式时就会出现这个问题,解决这问题有两个方法
1.加入BOM
2.有足够的字符判断编码

请测试以下例子:
新建 1.txt 2.txt并分别用系统记事本打开
一个输入 移动 一个输入 联通 (注意只输入这两个字,不能有换行或其它字符)保存退出,再打开你会发现联通被打败了~~~~~~~~~~~~~~

binghc 发表于 2012-5-23 14:16:02

回复 8# Qokelate


    对au3的了解又深入了一些,哥们,加入BOM?怎么加呀
要足够多的字符,多少才算足够啊?

binghc 发表于 2012-5-23 14:17:54

本帖最后由 binghc 于 2012-5-23 14:19 编辑

回复 8# Qokelate


额…还有,我用afan的测试工具都没发现这些问题啊

Qokelate 发表于 2012-5-23 14:21:27

本帖最后由 Qokelate 于 2012-5-23 14:25 编辑

回复 9# binghc


   1.改变编码格式(有些编辑器可以直接设定BOM)可以修改对应BOM
   2.BOM是可选的,但有BOM就可以避免出现误识别情况
   3.把第一行设成空行可一定程度解决误识别
   4.字符不在多,只要不是"敏感字符"开始就行   (请百度BOM)

Qokelate 发表于 2012-5-23 14:27:56

常用的编辑器都一定程度存在这问题

所以,打开文本时指定编码格式是最好的方法

binghc 发表于 2012-5-23 14:33:28

回复 12# Qokelate


我先用txt文件,把代码保存成ANSI编码,然后再改扩展名还是不行啊

user3000 发表于 2012-5-23 14:35:30

回复 7# binghc

此AU3版本, 没有完全正确翻译该出错信息, 应该是不支持不带BOM的UTF-8编码

我还百度了一下 BOM (别笑, 以前都不把这当一回事的):
BOM —— Byte Order Mark,中文名译作“字节顺序标记”

事实上, 是'元' 字惹的祸, 使脚本遭到'误杀', 1楼中放出的第1段代码, 随便用任意汉字代替'元'字, 脚本应该都能正常运行! (我只试了几个别的汉字, 以此推断)

binghc 发表于 2012-5-23 14:38:47

本帖最后由 binghc 于 2012-5-23 14:40 编辑

回复 14# user3000


如果是跟这个“元”是罪魁祸首,那为什么加了中文注释又没问题了?!
页: [1] 2
查看完整版本: 史上最怪的代码,这又是au3的bug还是什么,怪!真怪!!实在太怪了!!!