2009-06-30 6 views
4

인코딩을 위해 파이썬에 별칭을 추가 할 수있는 방법이 있습니까? 이 인코딩 '창-1251'을 사용하고 있지만, 자신의 캐릭터가 윈 - 1251으로 설정 한 웹 사이트가있다, 그래서 나는 윈 - 1251 창-1251 별칭이 될 싶은파이썬에 인코딩 별칭 추가하기

답변

8

, is :

import codecs 

def encalias(oldname, newname): 
    old = codecs.lookup(oldname) 
    new = codecs.CodecInfo(old.encode, old.decode, 
         streamreader=old.streamreader, 
         streamwriter=old.streamwriter, 
         incrementalencoder=old.incrementalencoder, 
         incrementaldecoder=old.incrementaldecoder, 
         name=newname) 
    def searcher(aname): 
    if aname == newname: 
     return new 
    else: 
     return None 
    codecs.register(searcher) 

이 파이썬 2.6입니다 - 인터페이스는 이전 버전에서 다릅니다.

특정 버전의 문서화되지 않은 내부 구조에 의존하지 않는다면, @ Lennart의 앨리어싱 방식도 물론 괜찮습니다. 물론 이보다 간단합니다 .--). 그러나 나는 이것이 보이는 것처럼 그가 이것을 유지할 수 있다고 생각한다.

+0

위대한 포인트 Alex! --- 훌륭한 문서가없는 모듈을 사용하지 마십시오. –

5
>>> import encodings 
>>> encodings.aliases.aliases['win_1251'] = 'cp1251' 
>>> print '\xcc\xce\xd1K\xc2\xc0'.decode('win-1251') 
MOCKBA 

하지만 개인적으로이 원숭이 패치를 고려하고 내 자신의 변환 표를 사용합니다. 그러나 나는 그 입장에 대해 좋은 주장을 할 수 없다. :)이 encodings 모듈이 아니라 내가 대신 codecs 사용하는 거라고 설명하지 않은

+0

아래에 있습니다. :-) 나는 공식적인 방법이 너무 많은 작업이고, 여전히 내 자신의 변환 목록을 제공 할 것이라고 생각하지만, 항상 실현 가능하지는 않다. –

+1

아마도 'encodings.aliases.aliases' 키가 정규화되었다는 것을 지적 할 수있다. 이것은 대시가있는'decode()'인수에서''win-1251 ''이 밑줄로 내부적으로''win_1251 ''에 매핑되는 방법입니다. 다른 방법으로는 작동하지 않습니다. 사람이 읽을 수있는 인코딩 이름을 대시로 표시하려면 별칭 키의 밑줄로 표시해야합니다. – tripleee

0

aliases.py 파일을 편집하여 인코딩 별명을 추가 할 수 있습니다. 내가 두 별칭 euc_jp_linux 및 인코딩 EUC_JPEUC-JP-리눅스을 추가 한 위

# euc_jp codec 
'eucjp'    : 'euc_jp', 
'ujis'    : 'euc_jp', 
'u_jis'    : 'euc_jp', 
'euc_jp_linux'  : 'euc_jp', 
'euc-jp-linux'  : 'euc_jp', 

. 64 비트 리눅스 시스템 aliases.py 파일의 경우

은 일반적으로 /usr/lib64/python2.6/encodings/

알렉스가 위의 해당 위치에 대한 좋은 인수를 제공 한