python에서 · 같은 특수문자를 콘솔에 출력
글쓴이: galien / 작성시간: 수, 2005/11/16 - 7:13오전
edict 같은 콘솔용 온라인 사전을 만들어보려고 하고 있습니다.
이런 문제만 생기지 않았다면 절대 공개 안하고 혼자 사용할만큼 부끄러운 날림 소스인데요.
일단 말씀드리면 한국 야후 사전에 http로 질문을하고 대답으로 받아온
http소스를 관심 있는 부분만 추려서 화면에 뿌리려고 하는데요.
'점'이라던지, 괄호등이 ascii가 아니더군요.
일단 문서는 euc-kr이라고 써 있어서 euc-kr로 디코드 해서 화면에 보여주는데
특수문자들 때문에 지저분하게 나옵니다.
도움 부탁드립니다.
#!/usr/bin/env python from sgmllib import SGMLParser import htmlentitydefs import urllib import codecs import sys class BaseHTMLProcessor(SGMLParser): def reset(self): SGMLParser.reset(self) self.pieces = [] self.vt = False def start_p(self, att): if att[0][1] == u'p05' or att[0][1] == u'p03': self.vt = True def end_p(self): if self.vt: self.pieces.append("\n") self.vt = False def handle_data(self, text): if self.vt: self.pieces.append(text) def output(self): """Return processed HTML as a single string""" return "".join(self.pieces) class ydicthon(BaseHTMLProcessor): def reset(self): BaseHTMLProcessor.reset(self) def go(self, key="dig"): keyurl="http://kr.dic.yahoo.com/search/eng/search.html?prop=eng&p="+key+"&x=0&y=0&type=eng" sock = urllib.urlopen(keyurl) htmlSource = sock.read() sock.close() hs = codecs.decode(htmlSource, "euc-kr") self.feed(hs) print self.output() if __name__ == "__main__": a = ydicthon() key = sys.argv[1] print a.go(key)
이상이 저의 못난 파이썬 코드이고
결과는 다음과 같습니다.
python ydicthon.py python (무당에게 내리는) 혼령, 악령; 혼령이나 귀신이 들린 사람; (혼령이나 악령이 들린) 예언자, 점술사. 1. 〈그리스 신화〉 피톤(Apollo가 Delphi에서 퇴치한 거대한 뱀). 2. (p-) 비단뱀류, 거대한 구렁이. None
음... 그러고 보니 맨 밑의 None도 뭔가의 버그 같네요. 그나마 파이썬 같은 경우는 덜 지저분하지만, 뜻이 많은 단어는 보기가 힘들어요
Forums:
Re: python에서 · 같은 특수문자를 콘솔에 출력
이 정도면 될까요? 참고로 None이 나오는 이유는 ydicthon.go 메소드가 아무 것도 반환하지 않기 때문입니다. (return 문이 없으므로 None을 반환합니다) 저 경우에는 print를 하지 않고 그냥 a.go(key)라고만 하셔야 겠지요.
웹 페이지 긁어 오는 목적이라면 BeautifulSoup을 추천드립니다.
- 토끼군
None 은 쉽게 알았습니다. 감사합니다. :oops: 뷰티플
None 은 쉽게 알았습니다. 감사합니다. :oops:
뷰티플 습은 지금 읽고있는데 편리해 보이는 군요.
(도대체 이런 것들은 어디서 다 정보를 접하시는지..)
그리고 주신 코드는 아이들 열어서 좀 공부해 봐야겠습니다.
감사합니다.
그러고 보니 저런 문자들이 어떤 캐릭터 셋에 정의 된 것인가요?보
그러고 보니 저런 문자들이 어떤 캐릭터 셋에 정의 된 것인가요?
보시다 시피 파이선 코드에서는 저걸 (야후가 말한대로) ecu_kr로 디코딩했는데,
한글은 보이지만 저 문자들은 안보이네요.
콘솔 환경은 ko_KR.UTF-8인데요. 이것과 관계가 잇는 것인지요.
[quote="김상욱"]그러고 보니 저런 문자들이 어떤 캐릭터 셋에 정의
아, 하나 제가 안 말씀드린 것이 있는데, 저 함수는 유니코드 문자열을 입력으로 받습니다. 즉 decode된 내용을 함수에 넣어야지 함수에 넣고 나온 결과를 가지고(에러가 날 가능성이 높습니다만) 디코딩하면 안 됩니다. 유니코드 문자열을 가지고 작업할 경우 print 할 때 자동으로 인코딩하기 때문에 별 문제는 없으리라 생각합니다.
- 토끼군
ncr code or html entity&#decimal
ncr code or html entity
&#decimal; or &#xHEXA;
UCS-2 Little Endian
iconv('UCS-2', 'UTF-8', 0x00B7)
https://xenosi.de/
댓글 달기