UTF-8 でエンコードされていない特殊文字を使用したカスタム検索用の OS X Automator シェル スクリプト

UTF-8 でエンコードされていない特殊文字を使用したカスタム検索用の OS X Automator シェル スクリプト

ここにスクリプトがあります

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'

関連情報