OS X Automator Shell Script para búsqueda personalizada con caracteres especiales no codificados con utf-8

1

Encuentro un guion aqui

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

que muestra cómo hacer una búsqueda en google usando shell script 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 tratando de adaptar este script a una búsqueda personalizada de caracteres chinos codificados en "gb2312".

Actualmente mi guión va como:

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 se prueba con el carácter "一", el script se abre http://www.yueyv.cn/index.asp?keyword=%D2%BB/

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

El código de "一" se ha ido.

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

rouraito
fuente

Respuestas:

1

Conjuntos de terminales LANG a un valor como en_US.UTF-8 de forma predeterminada, si no ha desactivado "Establecer variables de entorno de configuración regional en el inicio". Automator no, por lo que el comando ruby ​​produce un error de secuencia de bytes no válido.

$ 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 reemplaza el comando ruby ​​con iconv -f utf-8 -t gb2312|xxd -p|tr -d \\n|sed 's/../%&/g'.

Lri
fuente
¡Funciona perfectamente! Es la segunda vez que tu respuesta me ayuda. Muchas gracias!
rouraito
Me doy cuenta de que puso el comando "tr -d \\ n" para deshacerse del nuevo carácter de línea en la cadena y volcar el "0a" en la salida hexadecimal. Creo que debería colocarse después de la cadena como esta: "cadena" | tr -d \\ n | iconv -f utf-8 -t gb2312 | xxd -p | sed 's /../%& amp; / g'
rouraito
No, tr -d \\n está destinado a eliminar saltos de línea de la salida de xxd -p (que imprime 60 caracteres por línea). Puedes usar printf %s "$(cat)" para eliminar un salto de línea del final de la entrada. O reemplazar echo con printf %s.
Lri
Mi error. Gracias por aclarar esto.
rouraito