OS X Automator Shell Script для пользовательского поиска со специальным символом, не закодированным с помощью 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'
,