OS X Automator Shell-Skript für benutzerdefinierte Suche mit Sonderzeichen, die nicht mit UTF-8 codiert sind

OS X Automator Shell-Skript für benutzerdefinierte Suche mit Sonderzeichen, die nicht mit UTF-8 codiert sind

Ich finde hier ein Skript

Mac OS X (Lion) Chrome: Verknüpfung für „Mit Google suchen“

Hier wird gezeigt, wie Sie mithilfe eines Shell-Skripts in OS X Automator eine Google-Suche durchführen.

Das Originalskript lautet:

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

Ich versuche, dieses Skript an eine benutzerdefinierte Suche nach chinesischen Zeichen anzupassen, die in „gb2312“ codiert sind.

Derzeit sieht mein Skript so aus:

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

Es funktioniert gut im Terminal. Wenn Sie beispielsweise mit dem Zeichen "一" testen, öffnet sich das Skripthttp://www.yueyv.cn/index.asp?keyword=%D2%BB/

Wenn Sie dieses Skript jedoch als Dienst in OS X Automator hinzufügen, öffnet eshttp://www.yueyv.cn/index.asp?keyword=/

Der Code „一“ ist weg.

Ich habe eine ganze Weile gegoogelt, aber kein Ergebnis gefunden. Kann mir jemand helfen? Danke.

Antwort1

Terminal setzt LANGauf einen Wert wie en_US.UTF-8standardmäßig, wenn Sie „Lokale Umgebungsvariablen beim Start festlegen“ nicht deaktiviert haben. Automator tut dies nicht, daher führt der Ruby-Befehl zu einem Fehler wegen einer ungültigen Bytefolge.

$ 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

Versuchen Sie es LC_CTYPE=UTF-8 rubymit . Oder ersetzen Sie den Ruby-Befehl durch iconv -f utf-8 -t gb2312|xxd -p|tr -d \\n|sed 's/../%&/g'.

verwandte Informationen