2020年5月22日金曜日

findAll で文字化けする問題

findAll でオニオンソードを探すと、文字化けする。

//findall オニオンソード
Searching: オニオンメ[ド
↑のような感じ。「ソ」がいわゆるダメ文字。

エスケープ記号を使って

//findall オニオンソ\ード
Searching: オニオンメ[ド

とやってもやっぱりダメ。他のアドオンならこれでうまくいくのにfindAllはダメ。

findAll の場合、解決策としては、\を3つ書く。

//findall オニオンソ\\\ード
???/storage: オニオンソード
findAll は内部で自分自身を windower.send_command を使って
呼びなおしているため、エスケープ記号がその際に潰されてしまう。
下記がその該当コード。

handle_command = function(...)
    if first_pass then
        first_pass = false
        windower.send_ipc_message('findAll update')
        windower.send_command('wait 0.05;findall '..table.concat({...},' '))
ここの処理で消えないように\を3つ書くとうまくいく。4つでもOK。5つでもOK
6つでもOK
でも1つや2つじゃダメ。7つ以上でもダメ。



3つも\を書くのは面倒くさいので、1つでも大丈夫になるようにコードを修正してみる。

windower.send_command('wait 0.05;findall '..table.concat({...},' '):gsub('\\', '\\\\'))

これで「//findall オニオンソ\ード」で文字化けしなくなる。
でも、エスケープ記号を1つ使わないといけないのはしょうがないことだとして諦めよう。