저는 현재 일부 중국어 문자를 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 코드대신에.