为python添加编码别名

时间:2009-06-30 14:47:20

标签: python unicode character-encoding

有没有办法可以为python添加别名以进行编码。网上有网站使用编码'windows-1251'但是他们的字符集设置为win-1251,所以我想让win-1251成为windows-1251的别名

3 个答案:

答案 0 :(得分:8)

encodings模块未有详细记录,因此我改为使用codecsis

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的别名方法当然也可以 - 而且确实比这更简单;-)。但我怀疑(他似乎)这个更易于维护。

答案 1 :(得分:5)

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

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

答案 2 :(得分: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 中添加了两个别名 euc_jp_linux euc-jp-linux

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