<p>我问(在一个评论中)“给我们看看print repr(奇怪的特殊字符)的输出。在vim中打开文件时,什么是正确的?请比“格式怪异”更精确。“但是没有:-(</p>
<p>你用<code>od</code>查看什么文件?<code>file.gz</code>??如果您可以在其中看到任何可识别的内容,那么它不是gzip文件!你看到的不是换行符,而是包含0x0A的二进制字节</p>
<p>如果原始文件是utf-8编码的,那么用其他编解码器尝试它有什么意义呢?在</p>
<p>“与zcat一起工作正常”是否意味着您可以在没有utf8解码步骤的情况下获得可识别的数据??在</p>
<p>我建议你简化你的代码,一步一步地来做。。。例如,请参见对<a href="https://stackoverflow.com/questions/1883604/reading-utf-8-characters-from-a-gzip-file-in-python">this question</a>的接受答案。再试一次,请显示您运行的确切代码,并在描述结果时使用repr()。在</p>
<p><strong>更新</strong>看来DS已经猜到了您试图解释的\x1c和\x1d</p>
<p>下面是一些关于为什么会发生这种情况的注释:</p>
<p>在ASCII中,只有\r和\n在换行时才被考虑:</p>
<pre><code>>>> import pprint
>>> text = ''.join('A' + chr(i) for i in range(32)) + 'BBB'
>>> print repr(text)
'A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\nA\x0bA\x0cA\rA\x0eA\x0fA\x10
A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1cA\x1dA\x1eA\x1fBBB'
>>> pprint.pprint(text.splitlines(True))
['A\x00A\x01A\x02A\x03A\x04A\x05A\x06A\x07A\x08A\tA\n', # line break
'A\x0bA\x0cA\r', # line break
'A\x0eA\x0fA\x10A\x11A\x12A\x13A\x14A\x15A\x16A\x17A\x18A\x19A\x1aA\x1bA\x1cA\x
1dA\x1eA\x1fBBB']
>>>
</code></pre>
<p>但是在Unicode中,字符\x1D(文件分隔符)、\x1E(组分隔符)和\x1E(记录分隔符)也可以作为行尾:</p>
^{pr2}$
<p>不管你用什么编解码器都会发生这种情况。你仍然需要弄清楚你需要使用什么(如果有的话)编解码器。您还需要确定原始文件是否真的是文本文件而不是二进制文件。如果是文本文件,则需要考虑文件中\x1c和\x1d的含义。在</p>