5

我正在传递 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)
4

2 回答 2

4

如果 Notepad++ 转换它没问题,那么你应该只需要:

蟒蛇 2.7:

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

Python 3.x:

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

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

于 2016-01-31T09:16:34.643 回答
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'
于 2016-01-31T09:14:07.433 回答