bash에서 다른 명령에 대한 입력으로 중국어 문자열을 사용하는 방법은 무엇입니까?

bash에서 다른 명령에 대한 입력으로 중국어 문자열을 사용하는 방법은 무엇입니까?

저는 현재 일부 중국어 문자를 Pinyin으로 변환하는 명령을 사용하고 있습니다. 이를 위해서는 bash의 문자열이 유니코드로 안전해야 하고 결과를 다른 변수에 입력해야 합니다. 다음 명령을 잘 실행할 수 있습니다.

  chinese="你好"
  to-pinyin.py $chinese

예상대로 출력이 인쇄되지만 출력이 변수에 있기를 원하므로 다음을 수행해 보았습니다.

  chinese="你好"
  pinyin=$(to-pinyin.py $chinese)

Python은 다음과 같이 실패합니다.

Traceback (most recent call last):
  File "/~/to-pinyin.py", line 31, in <module>
    print pinyin.get(hanzi, delimiter=" ").capitalize()
UnicodeEncodeError: 'ascii' codec can't encode character u'\u01d0' in position 1: ordinal not in range(128)

백틱에서도 같은 일이 발생합니다. 출력을 파일에 쓰고 거기에서 변환한 다음 문자열을 변수에 로드하면 문제가 해결될 것 같습니다. 해결 방법을 피하기 위해 이 문제를 해결하려면 어떻게 해야 합니까?

편집하다:

여기서 각 요청은 로케일의 출력입니다.

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

사용된 솔루션

답변과 도움을 주셔서 감사합니다.이 다른 답변.encode('utf-8')Python 스크립트에서 인쇄 문자열 끝에 추가했습니다 .

Python3으로 전환할 수 있으면 좋겠지만 거기에는 기본 병음 패키지가 없고 Python3에서 작업을 빠르게 완료할 수 있는 좋은 병음 패키지를 설치할 수 없는 것 같습니다. 한동안 시도해 보았지만 python3이 내가 설치한 패키지 가져오기를 계속 거부했기 때문에 python2에 패키지를 설치했는데 바로 작동했습니다.

답변1

이건 문제야파이썬 2print, 그리고 Python 3의 일관된 유니코드 처리를 지원하는 근거.

이제 파일로 리디렉션하면 왜 문제가 발생합니까? 이 때문입니다 print()python2에서는 특별히 취급됩니다. 그리고 Python의 다른 파일과 유사한 객체는 항상 다음으로 변환됩니다.ASCII 코드다르게 설정하지 않는 한 다음을 사용하십시오.print()터미널로의 출력은 출력이 터미널로 전송되기 전에 사용자의 로케일 설정을 사용하여 변환됩니다. 언제print()터미널로 출력하지 마세요(예: 파일로 리디렉션).print()파일이 어떤 로케일을 사용하고 있는지 모른다고 판단하여 다음으로 변환을 시도했습니다.ASCII 코드대신에.

관련 정보