OS X Automator Shell Script para búsqueda personalizada con carácter especial no codificado con utf-8

OS X Automator Shell Script para búsqueda personalizada con carácter especial no codificado con utf-8

Encuentro un guión aquí

Mac OS X (Lion) Chrome: acceso directo para "Buscar con Google"

que muestra cómo realizar una búsqueda en Google usando un script de shell en OS X Automator.

El guión original es:

open "http://www.google.com/search?q=$(ruby -rcgi -e 'print CGI.escape $<.read.chomp')"

Estoy intentando adaptar este script a una búsqueda personalizada de caracteres chinos codificados en "gb2312".

Actualmente mi script dice así:

open "http://www.yueyv.cn/index.asp?keyword=$(ruby -rcgi -e 'print CGI.escape $<.read.chomp.encode("gb2312")')"

Funciona bien en la terminal. Por ejemplo, si realiza la prueba con el carácter "一", se abre el scripthttp://www.yueyv.cn/index.asp?keyword=%D2%BB/

Sin embargo, al agregar este script como servicio en OS X Automator, se abrehttp://www.yueyv.cn/index.asp?keyword=/

El código de "一" desapareció.

He buscado en Google durante bastante tiempo sin obtener resultado. Alguien puede ayudarme? Gracias.

Respuesta1

La terminal se establece LANGen un valor como en_US.UTF-8el predeterminado si no ha desmarcado "Establecer variables de entorno local al inicio". Automator no lo hace, por lo que el comando Ruby genera un error de secuencia de bytes no válida.

$ 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

Tratar de usar LC_CTYPE=UTF-8 ruby. O reemplace el comando Ruby con iconv -f utf-8 -t gb2312|xxd -p|tr -d \\n|sed 's/../%&/g'.

información relacionada