将Windows命令提示符中的文件和字符串“”

问题描述

我正在使用Windows串联文件。我使用了TYPE和COPY命令,并且得到了相同的工件。在将原始文件合并到新文件的位置,插入了字符串“”(即十进制:139 175 168十六进制:8BAFA8)。

如何解决此问题?您可以提供一个简单的解释来避免这种情况。为什么会这样?

解决方法

额外的字节是UTF-8编码签名。 Unicode字节顺序标记U + FEFF以UTF-8编码,并写入文件的开头,以指示文件以UTF-8编码。并非必需,但是Windows假定文本文件以本地ANSI编码(通常为Windows-1252)编码,除非出现BOM。

许多文件工具对此一无所知(DOS副本就是其中之一),因此串联文件可能很麻烦。

如今,对编码一无所知常常会带来麻烦。您不能简单地串联两个编码未知的文本文件,它们可能会不同。

如果您知道编码,请使用了解编码的工具。这是一个用Python编写的非常基本串联脚本,也可以转换编码。

# cat.py
import sys

if len(sys.argv) < 5:
    print('usage: cat <in_encoding> <out_encoding> <outfile> <infile> [infile...]')
else:  
    with open(sys.argv[3],'w',encoding=sys.argv[2]) as fout:
        for file in sys.argv[4:]:
            with open(file,'r',encoding=sys.argv[1]) as fin:
                fout.write(fin.read())

给出两个带有UTF-8(带有BOM编码)的文件,此命令将输出UTF-8(不包含BOM):

cat.py utf-8-sig utf-8 out.txt test1.txt test2.txt

关于Python的旁注:utf-8-sig编码读取文件并从数据(如果存在)中删除BOM,因此它可以用于读取任何带或不带BOM的UTF-8文件。 utf-8-sig编码在文件的开头写入 BOM,但utf-8不会。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...