2011-03-05 4 views
17

나는 BeautifulSoup을 사용하여 HTML에서 일부 텍스트를 추출하지만 화면이나 파일에 올바르게 인쇄하는 방법을 알 수 없습니다.utf-8 인코딩 된 문자열 인쇄

class Thread(object): 
    def __init__(self, title, author, date, content = u""): 
     self.title = title 
     self.author = author 
     self.date = date 
     self.content = content 
     self.replies = [] 

    def __unicode__(self): 
     s = u"" 

     for k, v in self.__dict__.items(): 
      s += u"%s = %s " % (k, v) 

     return s 

    def __repr__(self): 
     return repr(unicode(self)) 

    __str__ = __repr__ 

여기 Thread의 인스턴스를 인쇄하려고 내가 콘솔에서 볼 수있는 작업은 다음과 같습니다 : 텍스트가 포함 된 내 수업의 모양을

여기처럼 내가 얻을 수하려고 무엇이든

~/python-tests $ python test.py 
u'date = 21:01 03/02/11 content = author = \u05d3"\u05e8 \u05d9\u05d5\u05e0\u05d9 \u05e1\u05d8\u05d0\u05e0\u05e6\'\u05e1\u05e7\u05d5 replies = [] title = \u05de\u05d1\u05e0\u05d4 \u05d4\u05de\u05d1\u05d7\u05df ' 

출력 (위의 텍스트는 히브리어 여야 함). 나의 최종 목표는 Thread을 파일 (json이나 pickle을 사용)로 직렬화하고 그것을 다시 읽을 수있게하는 것이다.

저는 이것을 우분투 10.10에서 파이썬 2.6.6과 함께 실행하고 있습니다.

+0

나는 CSV 문서를 CSV 모듈로 작성하려고 할 때 비슷한 문제가 발생했습니다. 피타. 그러나'encode()'가 방법입니다. –

+0

나는 같은 문제가 있었지만, mysql 연결에 'charset = utf8'이 없다는 것이 전부였습니다! – kommradHomer

답변

17

유니 코드 문자열을 파일 (또는 콘솔)로 출력하려면 인코딩을 선택해야합니다. 파이썬에서 기본 텍스트 인코딩은 ASCII,하지만 당신은 UTF-8로, 다른 인코딩을 사용할 필요가 히브리어 문자를 지원하기 :

s = unicode(your_object).encode('utf8') 
f.write(s) 
+0

나는 존재한다; 출력은'print a_thread'의 출력입니다. – daniel

+0

내부적으로'print x'는'x .__ str__'을 호출하고 클래스에서는'__str__'을'__repr__'와 같게 정의했습니다. –

+0

그러면'__str__'은 어떻게해야합니까? 문서를 제대로 읽는다면'unicode' 객체를 반환해서는 안됩니다. – daniel

7

@ 마크의 대답에 좋은 대안은 환경 PYTHONIOENCODING=UTF-8 변수를 설정하는 것입니다.

c.f. Writing unicode strings via sys.stdout in Python.

+0

예! 그러나 프로그램의 os.putenv ('PYTHONIOENCODING', 'UTF-8')가 나에게 효과가 없었습니까? – tbc0