我正在尝试重新格式化文本文件,以便我可以将其上传到管道(qiime2( - 我测试了.txt文件的前几行(但已分开(,转换成功。但是,当我尝试在整个文件上运行脚本时,我会遇到一个错误:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 16: invalid start byte
我已经确定了编码的文件是UTF8,因此我不确定问题来自哪里。
$ file filename.txt
filename: UTF-8 Unicode text, with very long lines, with CRLF line terminator
我还审查了与错误相关的一些行,并且我无法在视觉上识别任何非正统字符。
我试图使用以下方式强制强制编码:
$iconv -f UTF8 -t UTF8 filename.txt > new_file.txt
但是,产生的错误是:
iconv: illegal input sequence at position 152683
我如何理解这一点是,使用UTF-8编码在位置上发生的任何字符都是不可读取/翻译的,但是我不确定为什么说该文件在UTF-8中被编码。
我正在Linux上运行此功能,并且数据本身是来自BOLD数据库的序列信息(如果其他任何人在尝试将其转换为适合Qiime2的格式时遇到了类似的问题(。
file
是错误的。file
命令未读取整个文件。它的猜测基于文件的某些样本。我没有源参考,但是file
在巨大的文件上如此快,以至于没有其他解释。
我猜想您的文件实际上是UTF-8,因为UTF-8具有特征性的字节序列。一段文本看起来只有UTF-8,但实际上并不是很不可能。
但是包含字节0x96的文本部分不能是UTF-8。一些文本很可能是用8位编码CP1252编码的,然后与UTF-8文本串联。这是不应该发生的事情,因为现在您在一个文件中有多个编码。对于文本编码,这种文件被打破了。
这只是猜测,但是根据我的经验,这是您描述的情况最有可能的解释。
对于带有损坏编码的文本,您可以使用第三方Python库FTFY:为您修复文本。它将在每个新线字符上剪切您的文本,并尝试找到(猜测(每个部分的正确编码。它并不总是神奇地做正确的事情,但它很好。
要为您提供更详细的指导,您必须显示要调用的脚本的代码(如果是您的代码并且要修复它(。