purbam 发表于 2015-1-27 13:43:16

[mush+perl]怎么处理中文参数?

本帖最后由 purbam 于 2015-1-28 11:54 AM 编辑

原帖编辑了一下,最根本的原因应该是perl里面中文参数传递的问题

一个很简单的测试trigger
<trigger
   enabled="y"
   match="^[&gt; ]*你(点了点)头"
   regexp="y"
   send_to="12"
   sequence="100"
>
<send>$world-&gt;SetVariable(testvar, "%1");</send>
</trigger>


会报syntax error如果捕获的是非汉字就没有问题,甚至也不是所有汉字都有问题,比如把上面的pattern改成”^[> ]*你点(了点)头“就正常了


同样的trigger在lua里没有问题,觉得还是perl和mushclient之间传递处理中文的问题
试了用perl的Encode模块,对字符串先decode,但试了utf8,gb2312都不行,而且结果有随机性


求高手指点yct43.

purbam 发表于 2015-1-27 15:24:33

用lua就没问题,难道是perl处理utf的问题?

nsonline 发表于 2015-1-27 16:29:28

Unrecognized character \xF6
应该是编码问题,可能是你的mcl文件编码不对。

purbam 发表于 2015-1-27 16:49:54

Unrecognized character \xF6
应该是编码问题,可能是你的mcl文件编码不对。
nsonline 发表于 2015-1-27 04:29 PM http://pkuxkx.net/forum/images/common/back.gif

mcl文件我用notepad和vim打开来看过,没发现什么特殊字符
现在基本能肯定不是脚本本身的问题,而是trigger里抓取到的中文,再通过$world->SetVariable("xxx", "%1")传递到perl解释器的时候出现了问题

windyhawk 发表于 2015-1-28 02:13:46

回复 4# purbam


    下载个notepad++软件,免费,支持多种语言代码和字符编码。用这个软件打开你的script文件,然后在encoding那里转换一下文件文字编码试试。我用python,就发现只有我把script编码设置成ascii,mush才能认,其他编码都会出错,比如utf-8之类的。

windows的notepad没有看文件编码那一项,所以你不知道文件是什么编码的。

purbam 发表于 2015-1-28 10:47:40

回复purbam


    下载个notepad++软件,免费,支持多种语言代码和字符编码。用这个软件打开你的scri ...
windyhawk 发表于 2015-1-28 02:13 AM http://pkuxkx.net/forum/images/common/back.gif

vim可以查看和更改格式,notepad虽然不能直接看,但是另存的时候也可以选择存为ansi或者utf8(其实也算是能看,因为另存的时候默认编码格式就是当前的编码格式)
应该不是脚本本身编码问题,是在正则里捕获的中文,被当成参数传给脚本函数的时候编码出了问题。

creat 发表于 2015-2-4 18:05:22

本帖最后由 creat 于 2015-2-4 10:06 AM 编辑

把[> ]去掉呢?有时这种半角符号也会造成错误吧??设置 output里可以把>直接解析为\n

purbam 发表于 2015-2-4 18:46:56

把[> ]去掉呢?有时这种半角符号也会造成错误吧??设置 output里可以把>直接解析为\n
creat 发表于 2015-2-4 06:05 PM http://pkuxkx.net/forum/images/common/back.gif

应该跟这个无关,我所有的trigger都是这么写的,但是有问题的只有几个
pattern如果出问题,正则应该匹配不上才对,也就进不到被调用的函数里了

这两天偶然发现个不是办法的办法,就是在涉及到中文参数传递的语句前后多加几个换行
比如<send>$world->SetVariable(testvar, "%1")</send>会出错,但是
<send>

$world->....

</send>
就好了
如果一行里有多个中文变量,那就要再多加几个换行才会好,也不知道为什么,而且不太稳定,有时候正常,过几天又不正常了

creat 发表于 2015-2-4 19:48:40

我遇到过一种情况,虽然和你碰到的可能不太一样│□大擒拿手 (qinna-shou)                  - 勉勉强强138/   28│
这种格式用
^[│\s+|│□](\W+)\s\((\D+)\)\s+\-\s*\W+\s*(\d*)\/\s*(\d*)$
匹配会出现乱码,触发的时候print "%0"完全正常,传递到脚本中则出现("Α醮笄苣檬?="qinna-shou")
之后换用
^(?:│\s+|│□)(\W+)\s\((\D+)\)\s+\-\s*\W+\s*(\d*)\/\s*(\d*)│$
才恢复正常

purbam 发表于 2015-2-6 09:43:00

我遇到过一种情况,虽然和你碰到的可能不太一样│□大擒拿手 (qinna-shou)                  - 勉勉强强...
creat 发表于 2015-2-4 07:48 PM http://pkuxkx.net/forum/images/common/back.gif


试了一下你的方法,还是不行,看来不是同一个问题
我所有的中文参数传递都会随机的出问题,不仅仅是开头有全角中文字符的时候,比如我顶楼提到的一个简单emote

真是要崩溃了,不行只能放弃perl了,唉yct39.
页: [1]
查看完整版本: [mush+perl]怎么处理中文参数?