Скрипт оболочки OS X Automator для пользовательского поиска со специальными символами, не закодированными с помощью utf-8

Скрипт оболочки OS X Automator для пользовательского поиска со специальными символами, не закодированными с помощью utf-8

Я нахожу сценарий здесь

Mac OS X (Lion) Chrome: сочетание клавиш для «Поиск с помощью Google»

который показывает, как выполнять поиск в Google с помощью скрипта оболочки в OS X Automator.

Оригинальный сценарий:

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'.

Связанный контент