- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以“cp500”编码的 IBM 大型机文件(我被告知),该文件将被解码为 ascii 或可读文本。该文件是从 unix 服务器获取的,使用 IPSwitch 工具传输到 windows。
我已经尝试了下面的代码,但无法实现我想要的:
sample data = 'ðñðòðõÅäù@@@@@@@ððð :BÄÑðò÷øò@@@JaÈK' - in txt file
import codecs
with open(file, "rb") as ebcdic:
ascii_txt = codecs.decode(ebcdic, "cp500")
print(ascii_txt)
这会产生类型错误
"TypeError: decoding with 'cp500' codec failed (TypeError: a bytes-
like object is required, not '_io.BufferedReader')"
然后我试了这两个,
with open(file, 'r', encoding='cp500') as f:
for line in f:
print(line)
with codecs.open(file, 'r', encoding='cp500')
for line in f:
print(line)
我也尝试了国际编码“cp1140”格式 -
with open(file, 'r', encoding="cp1140") as f:
for line in f:
print(line)
我期待一个可读的输出 - 一个抄写本布局 - 像这样......
0001***********
0002...........
0003...........
但是以上三个都打印输出为:
C¢C£C¢C¥C¢C§CeCuC¾ C¢C¢C¢âCdCjC¢C¥C¼C½C¥ [/Ch.
而且我还尝试以“rb”模式读取文件:
with open(file, 'rb') as f:
for line in f:
print(line)
这会产生以下输出 -
b'\xc3\xb0\xc3\xb1\xc3\xb0\xc3\xb2\xc3\xb0\xc3\xb5\xc3\x85\xc3\xa4\xc3\xb9@@@@@@@\xc3\xb0\xc3\xb0\xc3\xb0 :B\xc3\x84\xc3\x91\xc3\xb0\xc3\xb2\xc3\xb7\xc3\xb8\xc3\xb2@@@Ja\xc3\x88K'
这是我第一次处理 ebcdic/mainframe 文件 - 任何对解码的帮助都将不胜感激!
提前致谢:)
最佳答案
我怀疑 EBCDIC 数据是用 Latin-1 解码的,并用 UTF-8 保存在您现在使用的 TXT 文件中。
让我们尝试使用示例的简化版本进行重构:
>>> copybook = '0102 [/H.'
这是最初制作的。此文本使用 EBCDIC 编码:
>>> '0102 [/H.'.encode('cp500')
b'\xf0\xf1\xf0\xf2@Ja\xc8K'
这就是原始大型机文件中写入的字节序列。您也可以在一般(非 Python)表示中这样写:
F0 F1 F0 F2 40 4A 61 C8 4B
现在这些字节是用 Latin-1 或 CP-1252(“Windows Latin-1”)解码的。如果您在 Windows 机器上执行此操作,可能会发生这种情况:
>>> with open(file) as f:
... text = f.read()
>>> text
'ðñðò@JaÈK'
您可以像这样模拟这种错误编码:
>>> '0102 [/H.'.encode('cp500').decode('latin1')
'ðñðò@JaÈK'
这是您在帖子开头显示的字符串。这已经比必须处理大型机文件这个单纯的问题更糟糕了——这是大型机文件的 mojibake!
现在,更糟糕的是,这个字符串被保存到一个使用 UTF-8 的文件中。我们也试试看:
>>> '0102 [/H.'.encode('cp500').decode('latin1').encode('utf8')
b'\xc3\xb0\xc3\xb1\xc3\xb0\xc3\xb2@Ja\xc3\x88K'
根据最后一段(您使用 'rb'
模式打开并打印输出),这些是包含在您的 TXT 文件中的字节。
现在这些字节不再是有效的 EBCDIC。Latin-1 和 UTF-8 的编码往返扭曲了内容:
>>> '0102 [/H.'.encode('cp500').decode('latin1').encode('utf8').decode('cp500')
'C¢C£C¢C¥ [/Ch.'
这是您在问题中显示的第一次尝试中获得的输出。
为了从这种情况中恢复过来,你需要消除扭曲:
>>> distorted = '0102 [/H.'.encode('cp500').decode('latin1').encode('utf8')
>>> distorted
b'\xc3\xb0\xc3\xb1\xc3\xb0\xc3\xb2@Ja\xc3\x88K'
>>> recovered = distorted.decode('utf8').encode('latin1').decode('cp500')
>>> recovered
'0102 [/H.'
...或者当从文件中读取时,您可以让open
为您执行第一个解码步骤:
>>> with open(file, encoding='utf8') as f:
... data = f.read()
... text = data.encode('latin1').decode('cp500')
对于完整的示例行,这会产生以下文本:
'010205EU9 000\x80\x9aâDJ02782 [/H.'
我不能 100% 确定这是原文。它包含一些控制字符(80
、9A
)和一个非 ASCII 字母(“â”)。也许 000...782
block 必须被解释为二进制 blob。但我希望这个分析能帮助你在这个问题上更进一步!
关于python-3.x - 在 python 中将 ebcdic 解码为 ascii/可读文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55674524/
表架构 DROP TABLE bla; CREATE TABLE bla (id INTEGER, city INTEGER, year_ INTEGER, month_ INTEGER, val I
我需要拆分字符串/或从具有以下结构的字符串中获取更容易的子字符串。 字符串将来自 window.location.pathname 或 window.location.href,看起来像 text/n
每当将对象添加到数组中时,我都会尝试更新 TextView ,并在 TextView 中显示该文本,如下所示: "object 1" "object 2" 问题是,每次将新对象添加到数组时,它都会覆盖
我目前正在寻找使用 Java 读取网站可见文本并将其存储为纯文本字符串的方法。 换句话说,我想转换成这样: Hello stupid World进入“ Hello World ” 或者类似的东西 Un
我正在尝试以文本和 HTML 格式发送电子邮件,但无法正确发送正确的 header 。特别是,我想设置 Content-Type header ,但我找不到如何为 html 和文本部分单独设置它。 这
我尝试了上面的代码,但我无法绑定(bind)文本,我怎样才能将资源内部文本 bloc
我刚刚完成了 Space Shooter 教程,由于没有 GUIText 对象,所以我创建了 UI.Text 对象并进行了相应的编码。它在统一播放器中有效,但在构建 Web 应用程序后无效。我花了一段
我有这个代码: - (IBAction)setButtonPressed:(id)sender { NSUserDefaults *sharedDefaults = [[NSUserDefau
抱歉标题含糊不清,但我想不出我想在标题中做什么。无论如何,对于图像上的文本,我使用了 JLabel 文本并将其添加到图标中。 JLabel icon = new JLabel(new Imag
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我在将 Twitter 嵌入到我从 HTML 5 转换的 wordpress 运行网站时遇到问题。 我遇到的问题是推文不是我的自定义字体... 这是我无法使用任何 css 定位的 HTML 代码,我正
我正在尝试找到解决由于使用以下形式的代码而导致的冗余字符串连接问题的最佳方法: logger.debug("Entering loop, arg is: " + arg) // @1 在大多数情况下,
我写了这个测试 @Test public void removeRequestTextFromRouteError() throws Exception { String input = "F
我目前正在创建一个正则表达式来拆分所有匹配以下格式的字符串:&[文本],并且需要获取文本。字符串可能类似于:something &[text] &[text] everything &[text] 等
有没有办法将标题文本从一个词变形为另一个词,同时保留两个词中使用的字母?我看过的许多 css 文本动画大多是视觉的,很少有旋转整个单词的。 我想要做的是从一个词过渡,例如“BEACH”到“CHANGE
总结matplotlib绘图如何设置坐标轴刻度大小和刻度。 上代码: ?
我在容器 (1) 中创建了容器 (2)。你能帮忙如何向容器(1)添加文本吗?下面是我的代码 return Scaffold( body: Padding( padding: c
我似乎找不到任何人或任何人这样做过。我试图限制我们使用的图像数量,并想创建一个带有渐变作为其“颜色”的文本,并在其周围设置渐变轮廓/描边 到目前为止,我还没有看到任何将两者结合在一起的东西。 我可以自
我正在为视频游戏暗黑破坏神 2 使用 discord.py 构建一个不和谐机器人。其中一项功能要求机器人从暗黑破坏神 2 屏幕截图中提取项目的名称和属性。我目前正在为此使用 pytesseract,但
我很难弄清楚如何旋转 strip.text theme 中的属性来自 ggplot2 .我使用的是 R 版本 3.4.2 和 ggplot2 版本 2.2.1。 以下是 MWE 的数据。 > dput
我是一名优秀的程序员,十分优秀!