OS X Automator Shell 脚本用于自定义搜索未使用 utf-8 编码的特殊字符

OS X Automator Shell 脚本用于自定义搜索未使用 utf-8 编码的特殊字符

我在这里找到一个脚本

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'

相关内容