utf-8로 인코딩되지 않은 특수 문자를 사용한 사용자 정의 검색을 위한 OS X Automator 쉘 스크립트

utf-8로 인코딩되지 않은 특수 문자를 사용한 사용자 정의 검색을 위한 OS X Automator 쉘 스크립트

여기서 스크립트를 찾았습니다.

Mac OS X(Lion) Chrome: "Google로 검색" 바로가기

OS X Automator에서 쉘 스크립트를 사용하여 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=/

"一"이라는 코드가 사라졌습니다.

나는 결과없이 꽤 오랫동안 검색했습니다. 누구든지 나를 도와줄 수 있나요? 감사합니다.

답변1

터미널은 "시작 시 로케일 환경 변수 설정"을 선택 취소하지 않은 경우 기본적으로 다음 LANG과 같은 값으로 설정됩니다. en_US.UTF-8Automator는 그렇지 않으므로 ruby ​​명령으로 인해 잘못된 바이트 순서 오류가 발생합니다.

$ 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'.

관련 정보