如何检查文件格式是否存在异常乱码或损坏并处理修复异常文件,适用所有数据文件读取分析的必备步骤。
因为文件格式存在异常乱码或损坏导致文件无法被正常读取分析导致报错的情况示例
有朋友向我反映,读取分析一些文件的时候,会出现报错,我研究了一下,这些报错很多时候都是因为大家的数据文件是存在异常乱码或损坏导致文件无法被正常读取分析导致报错的情况
以下面的分析报错问题为例:
老师,多数据集合并出现报错,数据都整理好了。文件没有用其他程序打开。下面是combine文件,表达矩阵和分组信息软件界面填写。
你的CCC里面的基因id跟BBB里不一样,一个是基因名称,一个是数字编号,是没法合并啊
老师,bbb和ccc里面都有数字编号的,这是鼠的基因名。大概有几百个这种基因。下面ccc里面后面也有正常基因名的。CCC我只是进行了排序。下面第一个BBB排序后和CCC是一样的。
你先把我的演示数据运行一下,看看结果是什么样的
演示数据没问题
看了用户朋友反映的这种问题,用我的演示数据是能正常运行的,但是他自己的数据读取分析的时候就出现了这样的乱码报错,我大概看了一下,是他的数据文件存在异常乱码和损坏引起的,接下来,我会跟大家详细讲下这些问题出现报错的原因,以及检查文件格式是否存在异常乱码或损坏并处理修复异常文件的方法。
检查文件格式是否存在异常乱码或损坏并处理修复异常文件的方法
报错问题原因分析
我看了一下,前面的GEO多个数据集合并和去除批次效应出现的这种乱码报错问题都在于你把你的文件搞成乱码和损坏了。这些基本上都是你前面操作不当和也没有认真检查一下文件格式。
以BBB1.csv这个文件为例,这个文件只能用WPS表格打开,我用微软的excel打开这个文件就提示这个文件已经损坏了。
另外,WPS和微软excel都没法直接看出文件的编码格式,这里我都建议大家对于所有的csv,tsv,txt等表格文件和文本文件只要能用记事本打开的,都一定要先用记事本打开一下,在记事本里可以直接看出你的文本的编码是否错误和内容是否有乱码。并决定如何对文件进行进一步的格式转换和修复。
你的这个BBB1.csv文件用电脑的记事本打开显示的内容如下:
你的数据文件在记事本里显示是乱码的,编码格式是ANSI,不是更通用的UTF-8格式,这里我们都需要保证所有的数据文件都被转换成UTF-8格式。
为什么文件编码格式都要转换成UTF-8格式而不要使用ANSI等其他格式?
UTF-8 文件编码格式的介绍和优势
UTF-8(Unicode Transformation Format - 8-bit)是一种可变长度字符编码,用来表示 Unicode 字符集中的所有字符。它是目前最常用的编码格式,特别是在网页和文件存储中。UTF-8 是 Unicode 的一种实现方式,它使用 1 到 4 个字节来表示字符,能够兼容包括 ASCII 在内的所有字符。
1. UTF-8 编码原理
- 1字节(8位)表示基本的 ASCII 字符(如英文字符、数字等)。例如,字母 A 在 UTF-8 中的编码是 0x41,这与 ASCII 编码相同。
- 2到4字节表示 Unicode 字符集中的其他字符,包括常用的中文字符、表情符号、希腊字母等。通过变长的方式,UTF-8 可以根据需要扩展到更多的字节,适应全球不同语言和符号的需要。
2. UTF-8 的优势
- 兼容性:UTF-8 是一种向后兼容的编码格式,任何有效的 ASCII 文件在 UTF-8 编码下仍然有效。这意味着,使用 ASCII 编码的文件可以被当作 UTF-8 文件读取,而不会出现乱码。
- 国际化支持:UTF-8 能够支持世界上所有的字符(如中文、日文、俄文、阿拉伯文等),因此,它是跨语言、跨平台的理想选择。
- 节省空间:对于只包含英文字符的文本,UTF-8 编码与 ASCII 编码占用相同的空间。而对于其他语言(如中文、阿拉伯语等),它相较于 UTF-16 等其他 Unicode 编码格式通常更加节省空间。
3. 含有中英文和特殊符号时为何使用 UTF-8 更好
当文档中包含中英文以及特殊符号(如表情符号、数学符号等)时,文件编码如果不是 UTF-8,可能会导致乱码现象。这是因为:
- 不同语言的字符集问题:不同的编码格式使用不同的字节来表示字符。如果一个文件包含多种语言的字符(如中英文混排),而编码格式不一致,读取时就会出现乱码,无法正确解析文件中的字符。
- ASCII 编码只能表示英文字符:如果文件包含英文字符以外的字符(比如中文或表情符号),并且编码格式不支持这些字符,就会导致无法正常显示。例如,GBK 编码主要用于简体中文,但它无法支持日文、俄文等其他语言字符。
- 特殊符号的处理:特殊符号(如表情符号、数学符号等)通常需要更高的编码位数,UTF-8 可以轻松处理这些符号,而像 ASCII 或 ISO-8859-1 等编码则无法正确表示这些字符。
4. 避免乱码的原因
当你将文件保存为 UTF-8 格式时,以下几个原因确保了文件不会出现乱码:
- 统一的字符集:UTF-8 能够处理所有语言和符号,确保无论是英文、中文、日文,还是其他符号,都可以在同一个文件中被准确表示。
- 变长编码:UTF-8 使用变长编码来处理不同字符,适应不同语言和符号的存储需求。因此,即使是包含多个语言字符的文件,也能使用适当的字节数表示每个字符,避免了不兼容的字符编码问题。
- 广泛支持:UTF-8 被绝大多数操作系统、程序、网站和开发环境广泛支持,这使得它成为文件交换和多语言文本处理的标准。
6. 总结
- UTF-8 是一种兼容性强且节省空间的编码格式,特别适合处理多语言和特殊符号。
- 保存文件为 UTF-8 格式能避免乱码问题,尤其是当文件包含中英文混排或特殊字符时,UTF-8 能确保字符的正确显示和存储。
- 在现代计算环境中,UTF-8 已经成为标准编码格式,被广泛应用于操作系统、网页、数据库等多种场景。
文件格式存在异常乱码或损坏进行处理修复异常文件的方法
对于文件用记事本打开文件正常显示,没有乱码,但是文件编码格式不是UTF-8格式的处理方式如下:
这里我随便用一个test.csv文件来举例
我们接下来需要使用记事本直接把这个文件另存替换为UTF-8编码格式的同名文件,方法如下:
对于文件用记事本打开显示文件已经是乱码的情况处理方式如下:
把编码格式切换成正确的UTF-8格式后,把文件保存并选择直接替换掉原来的同名旧文件就可以了
另存为成功后,再用记事本重新打开看看文件是否已经是UTF-8格式了
这里该文件已经被转换成UTF-8格式了。
使用记事本打开,显示文件内容已经是乱码的处理方法如下:
比如这个BBB1.csv文件用电脑的记事本打开显示的内容如下:
这个数据文件在记事本里显示是乱码的,编码格式是ANSI,不是更通用的UTF-8格式,这里我们都需要保证所有的数据文件都被转换成UTF-8格式,同时还要解决掉这个文件在记事本中显示成乱码,无法正常显示的问题。
我们直接尝试把文件先用记事本打开后再在记事本里把文件另存为UTF-8编码格式,先另存为一份BBB1_test.csv文件,看看另存为UTF-8后,文件的显示是什么样的,文件编码转换还是类似于我们前面的方法
这里我们可以先尝试直接把文件转换成一份UTF-8编码格式的BBB1_test.csv的新文件,先不要直接覆盖替换原文件,因为可能转换成UTF-8编码,由于原文件本身就存在异常,即使转换成UTF-8,还可能显示为乱码。
我们打开生成的新文件BBB1_test.csv,可以看到显示新文件编码格式已经是UTF-8编码格式,但是使用记事本打开的时候,显示文件内容还是乱码,这说明这个文件本身从源头上就存在异常,对于csv或tsv文件这类表格文件,如果我们以前用WPS表格或excel编辑过,那可能是因为之前没有正常保存好,让文件出现了异常和损坏,那么我们可能需要从WPS或excel中把文件打开并重新再另存为新的正常的csv文件。
比如这个BBB1.csv文件是可以用WPS打开的,原来也被WPS打开和编辑过,我们再重新用WPS打开一下,打开显示的内容如下:
把该文件重新另存为一份BBB1_test2.csv的新文件文件,先不覆盖替换掉原文件。
重新用记事本打开另存为的BBB1_test2.csv文件,显示内容如下:
用记事本打开后,对于csv文件如果出现很多个,逗号分隔的空列,说明原文件从源头上就是不正常的,可能因为有太多逗号分隔的空列导致文件读取报错,这里我们需要在记事本里把这些逗号全部删掉,这里的文件编码格式也不是UTF-8格式,而是UTF-8 BOM格式,只要不是UTF-8格式,全部都要转成UTF-8格式。
- 先把记事本里后面的都是都要分隔的空列的逗号全部删掉,删掉后显示的文件内容如下:
我们再把文件另存为UTF-8编码格式的新文件BBB1_test3.csv
再把BBB1_test3.csv文件用记事本打开检查一下:
可以看到这个BBB1_test3.csv文件就是显示正常了,文件没有乱码,没有多余的逗号空列,同时文件编码格式也是转成了正确的UTF-8编码格式,这样的文件才能拿来做后续的数据读取和分析了。
同时如果你做的分析需要使用到多个文件,需要用记事本把每个文件都一次打开看看,如果有文件的编码格式不是UTF-8编码或文件存在乱码,都需要用上述的方法把文件进行以下处理和转换成正常的格式。
CCC1.csv文件也是乱码的,编码格式也不是UTF-8,用记事本打开也是这样:
按上面的方法先在WPS中将CCC1.csv另存为CCC1_test1.csv文件,再用记事本打开是这样:
这个CCC1.csv文件源头上就有很大问题,用记事本查看转换后的CCC1_test1.csv原始数据信息发现里面有很多逗号分隔的空白列,csv文件列是按逗号分隔的,两个逗号间没有内容就
说明该处是空白的,如果整列全部都是空白,两个逗号间每行都没有任何内容,就需要把这一列的逗号全部删掉,所以这里需要把结尾的这六个逗号分隔的空白列的这些逗号全部都删掉。
删除多余逗号后的CCC1_test2.csv用记事本打开时这样:
没有乱码,也是用UTF-8编码的。
用转换处理好的没有乱码的新文件再重新进行分析
使用转换处理好的没有乱码的新文件再重新运行
就是可以正常执行成功,并得到执行多个数据集合并好的结果文件: