![OS X Automator Shell 脚本用于自定义搜索未使用 utf-8 编码的特殊字符](https://linux22.com/image/1400095/OS%20X%20Automator%20Shell%20%E8%84%9A%E6%9C%AC%E7%94%A8%E4%BA%8E%E8%87%AA%E5%AE%9A%E4%B9%89%E6%90%9C%E7%B4%A2%E6%9C%AA%E4%BD%BF%E7%94%A8%20utf-8%20%E7%BC%96%E7%A0%81%E7%9A%84%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6.png)
我在这里找到一个脚本
Mac OS X (Lion) Chrome:“使用 Google 搜索”的快捷方式
它展示了如何在 OS X Automator 中使用 shell 脚本进行 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 自动操作程序中将此脚本添加为服务时,它会打开http://www.yueyv.cn/index.asp?keyword=/
“一”字的代码已经消失了。
我在 Google 上搜索了好久,却一无所获。有人能帮我吗?谢谢。
答案1
如果您没有取消选中“启动时设置区域环境变量”,则终端会默认设置LANG
为这样的值。Automator 不会取消选中,因此 ruby 命令会导致无效字节序列错误。en_US.UTF-8
$ 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'
。