有没有办法可以为python添加别名以进行编码。网上有网站使用编码'windows-1251'但是他们的字符集设置为win-1251,所以我想让win-1251成为windows-1251的别名
答案 0 :(得分: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的别名方法当然也可以 - 而且确实比这更简单;-)。但我怀疑(他似乎)这个更易于维护。
答案 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 /
下