解码 Ebcdic
Decoding Ebcdic
我正在传递 ebcdic 编码的数据。类似于:
s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'
尝试 .decode('cp500')
是错误的,但正确的做法是什么?如果我将字符串复制到 Notepad++ 之类的东西中,我可以将它从 EBCDIC 转换为 ascii,但我似乎无法在 python 中找到实现相同目的的可行方法。对于它的价值,正确的结果是:BOISE ID
(加上或减去 space 填充)。
正在从包含 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)
我的猜测是您需要将相应的 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'
如果 Notepad++ 转换正常,那么你只需要:
Python 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 3 open
到 Python 2.x,codecs/TextWrapper 和通用换行支持
我正在传递 ebcdic 编码的数据。类似于:
s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'
尝试 .decode('cp500')
是错误的,但正确的做法是什么?如果我将字符串复制到 Notepad++ 之类的东西中,我可以将它从 EBCDIC 转换为 ascii,但我似乎无法在 python 中找到实现相同目的的可行方法。对于它的价值,正确的结果是:BOISE ID
(加上或减去 space 填充)。
正在从包含 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)
我的猜测是您需要将相应的 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'
如果 Notepad++ 转换正常,那么你只需要:
Python 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 3 open
到 Python 2.x,codecs/TextWrapper 和通用换行支持