解码Ebcdic

时间:2016-01-31 08:40:12

标签: python character-encoding ebcdic

我正在传递ebcdic编码的数据。类似的东西:

s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'

尝试.decode('cp500')是错误的,但正确的做法是什么?如果我将字符串复制到Notepad ++之类的东西,我可以将它从EBCDIC转换为ascii,但我似乎无法在python中找到一种可行的方法来实现相同的目标。对于它的价值,正确的结果是:BOISE ID(加上或减去空格填充)。

正在从JSON对象行的文件中检索信息。那个文件看起来像这样:

{ "command": "flush-text", "text": "@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O" }
{ "command": "flush-text", "text": "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\u00C9\u00C4@\u00D5\u00A4\u0094\u0082\u0085\u0099z@@@@@@@@@@\u00D9\u00F5\u00F9\u00F7\u00F6\u00F8\u00F7\u00F2\u00F4" }
{ "command": "flush-text", "text": "@@@@@OmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmO" }
{ "command": "flush-text", "text": "@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O" }

处理循环看起来像:

with open('myfile.txt', 'rb') as fh:
  for line in fh:
    data = json.loads(line)

2 个答案:

答案 0 :(得分:4)

如果Notepad ++将其转换为ok,那么您只需要:

Python 2.7:

MATCH (book:Book),(group1:Reader),(group2:Reader)
MATCH (book)<-[:Likes]-(group1)

MATCH (book)<-[:Likes]-(group2)

MATCH (group1)-[r]-(group2)

RETURN group1.Name, type(r), group2.Name 

Python 3.x:

with io.open('myfile.txt', 'r', encoding="cp500") as fh:
  for line in fh:
    data = json.loads(line)

这使用TextWrapper解码文件,因为它使用给定的解码进行读取。 with open('myfile.txt', 'r', encoding="cp500") as fh: for line in fh: data = json.loads(line) 模块为Python 2.x提供了Python 3 io,带有编解码器/ TextWrapper和通用换行支持

答案 1 :(得分:3)

我的猜测是你需要相应的Unicode序号的值作为字节,然后用cp500解码。

>>> s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'
>>> bytearray(ord(c) for c in s).decode('cp500')
u'                   BOISE ID'

可替换地:

>>> s.encode('latin-1').decode('cp500')
u'                   BOISE ID'