2009-06-30 71 views
4

有没有一种方法可以将别名添加到python进行编码。有在网络上的网站正在使用的编码“窗口-1251”,但有自己的字符集设置为赢得-1251,所以我想有取胜-1251是一个别名为windows-1251将编码别名添加到python

回答

8

encodings模块是不是有据可查的,所以我想改用codecs,其中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) 

这是Python 2.6中 - 该接口是在早期版本不同。

如果您不介意依赖特定版本的无证内部,@ Lennart的别名方法当然也可以 - 确实比这更简单;-)。但我怀疑(如他似乎),这一个更容易维护。

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

虽然我个人会考虑这个猴子补丁,并使用我自己的转换表。但我不能为这个立场提供任何好的论据。 :)

+0

亚历确实提供用于上述该位置的很好的理由。 :-) 我认为官方的方式太多了,仍然只是提供我自己的转换列表,但这并不总是可行的 – 2009-07-01 20:36:52

+1

也许指出`encodings.aliases.aliases`键是正常化的。这是'decode()`参数中'win-1251'的方式,带有短划线,映射到内部带有下划线的'win_1251'。反过来也行不通。带有短划线的人类可读编码名称需要在别名键中用下划线表示。 – tripleee 2017-05-15 13:07:21

0

通过编辑aliases.py文件可以添加编码别名。

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

上面我已经添加了两个别名euc_jp_linuxEUC-JP-linux的到编码EUC_JP

对于64位Linux系统aliases.py文件通常位于下/usr/lib64/python2.6/encodings/