解码Ebcdic

g.d*_*d.c 5 python character-encoding ebcdic

我正在传递ebcdic编码的数据。就像是:

s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'
Run Code Online (Sandbox Code Playgroud)

尝试.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" }
Run Code Online (Sandbox Code Playgroud)

处理循环如下所示:

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

Ala*_*ack 4

如果 Notepad++ 可以正常转换它,那么您应该只需要:

Python 2.7:

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

Python 3.x:

with open('myfile.txt', 'r', encoding="cp500") as fh:
  for line in fh:
    data = json.loads(line)
Run Code Online (Sandbox Code Playgroud)

这使用 TextWrapper 在使用给定解码读取文件时对文件进行解码。io模块提供 Python 3open到 Python 2.x,具有编解码器/TextWrapper 和通用换行符支持