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


1

여기에 스크립트가 있습니다

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-8으로 설정됩니다. Automator는 그렇지 않으므로 루비 명령으로 인해 잘못된 바이트 시퀀스 오류가 발생합니다.

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


완벽하게 작동합니다! 당신의 대답이 저를 도와주는 것은 두 번째입니다. 정말 고맙습니다!
rouraito

문자열에서 줄 바꿈 문자를 제거하고 16 진수 출력에서 ​​"0a"를 덤프하기 위해 "tr -d \\ n"명령을 넣은 것을 알고 있습니다. 나는이 같은 문자열 다음에 위치해야한다고 생각 : "문자열"| TR -d \\ n은 |의 iconv -f UTF-8 -t GB2312 | xxd의 -p | 나오지도의 /../%&/ g '
rouraito

아니요, tr -d \\n출력에서 줄 바꿈을 제거하기위한 것입니다 xxd -p(한 줄에 60 자 인쇄). printf %s "$(cat)"입력 끝에서 줄 바꿈을 제거하는 데 사용할 수 있습니다 . 또는 교체 echo와 함께 printf %s.
Lri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.