어제 뽀빠이님께서 보내주신 트랙백이 장렬하게 깨져서 한참 보였었는데, 그 부분을 수정하기 위해서 코드를 좀 들여다 봤습니다. 이 부분은 아주 유명한 프로토콜 디자인 상의 오류인 트랙백의 인코딩 문제로 인해서 발생합니다. 아시다시피 트랙백을 전송하는 HTTP GET 리퀘스트에는 특별히 인코딩을 쓸 수 있는 방법이 없는데, URI/URL의 원초적인 한계성으로 인해서 HTTP GET에는 뭐가 들어오던 간에, 인코딩 이름을 직접 주지 않고서는 뭐 해결할 방법이 전혀 없는.. 참으로 답답한 경우 중의 하나입니다. 으흐~ (이 부분은 트랙백의 기반 표준을 IRI로 바꿔버리면 해결되긴 합니다.)
그래서, 결국은 아직까지는 euc-kr인가 utf-8인가를 구분하기 위해서는 그냥 디코딩해 보는 방법 외에는 딱히 방법이 없는데, 많은 블로그 소프트웨어들이 이런 경우는 고려하지 않고 작성되어 있어서~ ~ 코어블로그도 마찬가지라서.. 그냥 깨져버리고 말았네요.. 흐.. 그래서 일단은 우선 긴급 상황을 패치하기 위해 양쪽 다 시도하는 코드를 우겨넣어 보았습니다. 주말에 환경 설정에서 읽도록 바꿔야겠네요.. 🙂
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- COREBlog.py.orig Wed Apr 27 21:36:03 2005 +++ COREBlog.py Wed Apr 27 21:45:49 2005 @@ -1117,6 +1117,12 @@ #Append a Comment object to self.entries if not self.trackbacks.has_key(id): self.trackback_list.insert(id) + for attrname in ('title', 'excerpt', 'url', 'blog_name'): + try: + getattr(obj, attrname).decode('utf-8') + except UnicodeDecodeError: + newval = getattr(obj, attrname).decode('cp949').encode('utf-8') + setattr(obj, attrname, newval) self.trackbacks[id] = obj |
최신 트랙백 스펙(1.2)에는 Content-Type을 지정할 때 반드시 charset을 지정하도록 되어 있습니다. 지키는 곳은 얼마 없습니다만 🙁 http://www.sixapart.com/pronet/docs/trackback_spec 를 참고하세요.
흐흐.. 그렇군요~ GET에서 POST로 바뀌었네요.. +_+
어어 1.1부터 POST였는데용 -.-
너무 장렬히 깨져서 다시는 트랙백 안 보낼까했었는데 ^_^