PyRTF에 다국적 지원을 추가하는 방법

mIRC 로그를 RTF 파일로 정리하는 프로그램을 짜면서 초장에 제일 막혔던 건 RTF의 한국어 인코딩 부분이었다. PyRTF라고 파이썬으로 꽤 고레벨에서 RTF 파일을 만드는 모듈을 발견하기는 했는데, 이게 다국어 지원이 전혀 없다는 걸 깨닫고 욕이 나왔다. (..) 버전 0.45 정도에 과한 기대를 해도 안 되겠지만 말야.

위키피디아에서 RTF 표준에 대한 기사를 보고서도 한참 헤맨 게, utf-8 디코딩을 해서 유니코드를 내려고 해도 결과는 이런 식이었거든.

>> print '안녕'.decode('utf-8').encode('unicode_escape')
>> \uc548\ub155

문제는 저건 RTF 파일에서 받지를 않는다는 점. 워드프로세서로 열어보면 안 나온다. 그래서 역으로 워드프로세서로 '안녕'을 치고 에딧패드 (EditPad)로 열어보니 다음과 같이 나왔다.

\u50504\'3f\u45397\'3f\u33\'3f

이 차이를 가지고 한동안 끙끙대다가 ord 기능을 알게 되어서 결국 다음과 같은 식으로 해결했다.

def ordinalCode(string, enc):

    ordcode =''
    string = string.decode(enc)
    ordinals = [ord(x) for x in string]

    for ordinal in ordinals:
        #디버깅 코드
        #print ordinal
        ordcode = "%s\\u%d\\'3f" % (ordcode,ordinal)

    return ordcode

이 기능을 달아두고 RTF 파일을 만들 때는 예를 들어 추가할 내용을 string이라고 하면

enc = 'utf-8'
newline = ordinalCode(string, enc)
p.append(newline)
section.append(p)

하는 식이 된다. 사실 글자 뒤마다 붙은 \'3f가 무슨 뜻인지도 모르고 \u50504와 \uc538의 차이가 뭔지도 모르겠다. 그걸 알 만큼 공부했으면 프로그래머지, 허접 취미 코더겠나. 내가 아는 건 해보니 일단 됐다는 것. 그리고 내가 테스트해본 한 이렇게 하면 우리말로도 PyRTF를 이용해 RTF를 쓸 수 있겠다는 정도이다. 막혔던 문제에 대해 해결책을 찾아낸다는 건 즐거운 일~
2008/04/02 21:06 2008/04/02 21:06
로키
tags :
분류없음 2008/04/02 21:06

트랙백 주소 : http://lokasenna.pe.kr/blog/trackback/146

댓글을 달아 주세요

  1. 종횡무진 2008/04/02 22:39  수정/삭제  댓글쓰기

    프로그램 만지며 에러를 고치는 것도 큰 재미죠^^
    로키님은 정말 못하시는게 없는 거 같아서 부럽니다^_____^

    • 로키 2008/04/03 04:40  수정/삭제

      문제를 해결한 순간의 그 쾌감이 비할 데가 없죠.^^ 못하는 게 없긴요, 잘하는 거 빼고 다 못해요(??)

Powerd by Textcube, designed by criuce
rss