另一個編碼問題,我正在處理IBM大型機使用IBM870編碼,這是python不支持或沒有其他的東西。如何添加一個新的編碼到python 2.6?
幸運的是颳起了對於使用字符蟒蛇產生相應的編碼定義的腳本一個有天賦的編碼器列出了FileFormat.info
availble的使用的列表是這一個:IBM870 character list
生成的編碼可以在這裏看到:cp870.py
在考慮中的系統是一個RHEL 6.3運行蟒2.6:
Python 2.6.6 (r266:84292, Aug 28 2012, 10:55:56)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
的cp870.py被放置在:
/usr/lib64/python2.6/encodings/
下列條目已經被添加到:
/usr/lib64/python2.6/encodings/aliases.py
# cp870 codec
'870' : 'cp870',
'csibm870' : 'cp870',
'ibm870' : 'cp870',
別名被正確解析爲這裏看到(thanks to this answer):
>>> from encodings.aliases import aliases
>>> def find(q):
... return [(k,v) for k, v in aliases.items() if q in k or q in v]
...
>>> find('870')
[('ibm870', 'cp870'), ('870', 'cp870'), ('csibm870', 'cp870')]
>>> find('cp870')
[('ibm870', 'cp870'), ('870', 'cp870'), ('csibm870', 'cp870')]
>>> find('ibm870')
[('ibm870', 'cp870'), ('csibm870', 'cp870')]
當我嘗試編碼()某些字符時,它不按計劃工作:
>>> 'c'.encode('cp870')
'\x83'
>>> 'č'.encode('cp870')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python2.6/encodings/cp870.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
這是什麼「\ X83」應該根據cp870.py是:
u'\x83' # 0x23 -> NO BREAK HERE (U+0083)
由於我是新手到Python可能有人指教我,以便需要別的什麼蟒蛇正常加載並使用這種編碼?
我嘗試上述步驟的Python 2.7,armscii8但是,它不承認在aliases.py中添加了鍵/值對除了上述步驟外,還有什麼需要做的嗎?謝謝 – user2431012 2014-11-12 14:59:32