为什么 ??我将一个文本文件复制到另一个文本时出现?

时间:2018-12-30 08:48:13

标签: python python-3.x

当我将一个文本文件复制到另一个文本文件时,新文件具有两个字符:( ?? ),在我不需要的结尾。

我正在Windows7上使用Python3.6.0

这是我的脚本:

from sys import argv
script, from_file, to_file = argv

#Open from_file and get the text from it
indata = open(from_file).read()

#Write the from_file text to to_file
open(to_file, 'w').write(indata)

我在PowerShell中运行以下命令:

>echo "This is a test file." > TestSource.txt
>type TestSource.txt
This is a test file.
>python CopyFile.py TestSource.txt TestDestination.txt
>type TestDestination.txt
This is a test file.??

为什么在我创建的文件中出现两个问号(??)?

编辑:This Related Question被建议重复。我的问题是关于将一​​个文本文件复制到另一个文本时Python的行为。这个相关的问题是关于Windows PowerShell如何创建文本文件的。

1 个答案:

答案 0 :(得分:7)

Powershell正在使用UTF-16创建文件。您已在文本模式(默认)下打开文件而未指定编码,因此python调用locale.getpreferredencoding(False)并使用该编码(在我的Windows系统中为cp1252)。

文本模式会翻译行尾,并且使用错误的编码会产生问题。要解决此问题,请使用二进制模式获取字节对字节的副本,而不管编码如何。我还建议使用with来确保文件正确关闭:

from sys import argv
script, from_file, to_file = argv

#Open from_file and get the text from it
with open(from_file,'rb') as f:
    data = f.read()

#Write the from_file text to to_file
with open(to_file,'wb') as f:
    f.write(data)