多文本拼接出现NUL字符,Notepad++与Notepad显示异常原因排查
文件拼接后出现NUL字符异常的原因分析
问题场景
我通过Python脚本将1000个文件拼接成output_file.txt,使用的代码如下:
import shutil with open('output_file.txt','wb') as wfd: for f in file_paths: with open(f,'rb') as fd: shutil.copyfileobj(fd, wfd) wfd.write(b"\n")
在Notepad++和Notepad中打开该文件时,同一位置出现NUL字符显示异常,但文件其他部分显示正常。
可能的原因
- 源文件本身携带NUL字符:你拼接的1000个文件中,某个(或某几个)源文件本身就包含二进制空字节(
\x00,即NUL字符),脚本只是原样复制了这些内容到输出文件,刚好集中在你看到的异常位置。这是最常见的原因。 - 源文件的编码/格式异常:如果某个源文件声称是文本格式,但实际存在编码错误(比如本该是UTF-8却混入了ASCII以外的空字节),当你用二进制模式读取时,这些错误的空字节会被保留并写入到输出文件中。
- 缓冲区处理的极端情况:虽然概率很低,但
shutil.copyfileobj在处理超大文件或者特殊格式文件时,缓冲区的读写操作可能出现边界错误,意外写入空字节。不过这种情况远不如源文件本身有问题的可能性高。 - 换行写入的潜在冲突:你在每个文件末尾写入
b"\n",如果某个源文件的末尾是不完整的二进制数据片段,和换行符拼接后,在文本编辑器中可能被解析为NUL字符,但这种情况非常少见。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

