在Powershell中将两个文件的Get-Content附加到新文件中会在字符之间插入空格

时间:2013-12-17 20:14:19

标签: python powershell

我在Powershell中写了以下内容:

Get-Content "Path/to/InputFile1/InputFile1.txt" -totalcount 250| Out-File -FilePath "Path/to/OutputFile/OutputFile.txt" -Append

Get-Content "Path/to/InputFile2/InputFile2.txt" -totalcount 250| Out-File -FilePath "Path/to/OutputFile/OutputFile.txt" -Append

我检查了OutputFile.txt的大小,发现它的大小正是我预期的两倍。我检查确保使用以下内容在Powershell中看起来一切正常:

Get-Content "Path/to/OutputFile/OutputFile.txt" -totalcount 1 

没有什么看起来与众不同。然后我进入Python,并使用以下内容检查了一个片段:

f = open("Path/to/OutputFile/OutputFile.txt","rb")
f = f.read()
print f[0:20]

注意到一个不寻常的输出。虽然初始文件的代码段看起来像00102xxxx,5197609,Je,但输出文件的代码段如下所示: ■0 0 1 0 2 x x x x。这个奇怪的行为背后有解释吗?如果不是因为输出文件正好是我预期的两倍,那么它似乎是特定于Python的。我不确定交替的空间是如何发生的。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

原因是输入文本被编码为ASCII(每个字符8位),Out-File cmdlet将文件输出为Unicode(每个字符16位...即大小的两倍)。输出相同数量的字符,只是编码不同。

如果要将其更改回ASCII(如您所料),请设置-Encoding "ASCII"参数,以使您的文字如下所示:

Get-Content "Path/to/InputFile1/InputFile1.txt" -totalcount 250| Out-File -Encoding "ASCII" -FilePath "Path/to/OutputFile/OutputFile.txt" -Append

Get-Content "Path/to/InputFile2/InputFile2.txt" -totalcount 250| Out-File -Encoding "ASCII" -FilePath "Path/to/OutputFile/OutputFile.txt" -Append

答案 1 :(得分:1)

确实有一个解释。您有编码问题。弄清楚编码Powershell正在使用,因为是Windows,我假设UCS-2并在python中执行:

f = open("Path/to/OutputFile/OutputFile.txt","rb")
f = f.read().decode('utf16')
print f[0:20].encode('utf-8')

希望这有帮助!