ここにスクリプトがあります
Mac OS X (Lion) Chrome: 「Google で検索」のショートカット
これは、OS X Automator でシェル スクリプトを使用して Google 検索を実行する方法を示しています。
元のスクリプトは次のとおりです。
open "http://www.google.com/search?q=$(ruby -rcgi -e 'print CGI.escape $<.read.chomp')"
このスクリプトを、「gb2312」でエンコードされた中国語文字のカスタム検索に適用しようとしています。
現在、私のスクリプトは次のようになります:
open "http://www.yueyv.cn/index.asp?keyword=$(ruby -rcgi -e 'print CGI.escape $<.read.chomp.encode("gb2312")')"
ターミナルでは問題なく動作します。例えば、文字「一」でテストする場合、スクリプトは次のように開きます。http://www.yueyv.cn/index.asp?keyword=%D2%BB/
しかし、このスクリプトをOS X Automatorのサービスとして追加すると、http://www.yueyv.cn/index.asp?keyword=/
「一」のコードは消えました。
かなり長い間グーグルで検索しましたが、結果が見つかりません。誰か助けてくれませんか? ありがとうございます。
答え1
「起動時にロケール環境変数を設定する」のチェックを外していない場合、ターミナルはデフォルトLANG
のような値を設定しますen_US.UTF-8
。Automator はチェックを外していないため、ruby コマンドは無効なバイト シーケンス エラーになります。
$ unset LANG
$ echo 一|ruby -rcgi -e 'puts CGI.escape $<.read.chomp.encode("gb2312")'
-e:1:in `encode': "\xE4" on US-ASCII (Encoding::InvalidByteSequenceError)
from -e:1:in `<main>'
$ echo 一|LC_CTYPE=UTF-8 ruby -rcgi -e 'puts CGI.escape $<.read.chomp.encode("gb2312")'
%D2%BB
を使用してくださいLC_CTYPE=UTF-8 ruby
。または、ruby コマンドを に置き換えてくださいiconv -f utf-8 -t gb2312|xxd -p|tr -d \\n|sed 's/../%&/g'
。