2017-01-13 5 views
0

관련 게시물이 여러 개 있지만 명확한 대답은 없습니다. 예를 들어 ASCII를 지원하는 터미널에 s=u'\xe9\xe1' 문자열을 인쇄하려고한다고 가정 해 봅시다 (예 :). 기본 동작으로 다음을 구성 할 수있는 방법이 있나요 :파이썬 기본 문자 인코딩 처리

import sys 
s = u'\xe9\xe1' 
s = s.encode(sys.stdout.encoding, 'replace').decode(sys.stdout.encoding) 
print(s) 

즉, 내가 뭔가를 인쇄 할 문자열에 원하는 - 심지어 쓰레기 - 오히려 예외 (UnicodeEncodeError)를 올리는 것보다. 파이썬 3.5를 사용하고 있습니다.

UTF-8을 포함 할 수있는 모든 문자열에이 코드를 쓰는 것을 피하고 싶습니다.

답변

1

다음 세 가지 중 하나를 수행 할 수 있습니다

  • PYTHONIOENCODING environment variablestdoutstderr에 대한 오류 처리기를 조정하십시오 :

    export PYTHONIOENCODING=:replace 
    

    참고; 코덱을 지정하지 않았고 오류 처리기 만 지정했습니다.

  • 다른 오류 처리기를 설정하면 stdoutTextIOWrapper 교체 :

    import sys 
    import io 
    
    sys.stdout = io.TextIOWrapper(
        sys.stdout.buffer, encoding=sys.stdout.encoding, 
        errors='replace', 
        line_buffering=sys.stdout.line_buffering) 
    
  • 를 인쇄 할 때 sys.stdout.buffer 주변에 별도의 TextIOWrapper 인스턴스를 생성하고 file 인수로 그에 전달합니다

    import sys 
    import io 
    
    replacing_stdout = io.TextIOWrapper(
        sys.stdout.buffer, encoding=sys.stdout.encoding, 
        errors='replace', 
        line_buffering=sys.stdout.line_buffering) 
    
    print(s, file=replacing_stdout) 
    
+0

이것은 정확히 제가 찾고있는 것입니다 - 많은 감사를드립니다! (나는 옵션 2와 함께 갔다) – ws6079