인코딩을 위해 파이썬에 별칭을 추가 할 수있는 방법이 있습니까? 이 인코딩 '창-1251'을 사용하고 있지만, 자신의 캐릭터가 윈 - 1251으로 설정 한 웹 사이트가있다, 그래서 나는 윈 - 1251 창-1251 별칭이 될 싶은파이썬에 인코딩 별칭 추가하기
답변
, 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의 앨리어싱 방식도 물론 괜찮습니다. 물론 이보다 간단합니다 .--). 그러나 나는 이것이 보이는 것처럼 그가 이것을 유지할 수 있다고 생각한다.
>>> import encodings
>>> encodings.aliases.aliases['win_1251'] = 'cp1251'
>>> print '\xcc\xce\xd1K\xc2\xc0'.decode('win-1251')
MOCKBA
하지만 개인적으로이 원숭이 패치를 고려하고 내 자신의 변환 표를 사용합니다. 그러나 나는 그 입장에 대해 좋은 주장을 할 수 없다. :)이 encodings
모듈이 아니라 내가 대신 codecs
사용하는 거라고 설명하지 않은
아래에 있습니다. :-) 나는 공식적인 방법이 너무 많은 작업이고, 여전히 내 자신의 변환 목록을 제공 할 것이라고 생각하지만, 항상 실현 가능하지는 않다. –
아마도 'encodings.aliases.aliases' 키가 정규화되었다는 것을 지적 할 수있다. 이것은 대시가있는'decode()'인수에서''win-1251 ''이 밑줄로 내부적으로''win_1251 ''에 매핑되는 방법입니다. 다른 방법으로는 작동하지 않습니다. 사람이 읽을 수있는 인코딩 이름을 대시로 표시하려면 별칭 키의 밑줄로 표시해야합니다. – tripleee
aliases.py 파일을 편집하여 인코딩 별명을 추가 할 수 있습니다. 내가 두 별칭 euc_jp_linux 및 인코딩 EUC_JP에 EUC-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/
알렉스가 위의 해당 위치에 대한 좋은 인수를 제공 한
위대한 포인트 Alex! --- 훌륭한 문서가없는 모듈을 사용하지 마십시오. –