Powershell Out-File:强制编码为Ascii

时间:2016-04-01 18:18:31

标签: powershell character-encoding

我正在尝试使用Powershell规范化一组TAB分隔的日志文件。

这是当前的脚本:

(Get-ChildItem *.csv) |%{
#Store the name of the file & date
$Name = $_.basename
$FileDate = $_.CreationTime
#Prepends the following to each message: unique Identifer, Hostname, date
(Get-Content $_.fullname) -replace "^","AR-LOG|$Name|$FileDate|"|
#Replaces the TAB delimeter with a Pipe delimeter
Foreach-Object {$_ -replace '   ','|'}  |
#Appends the resulting message in ascii
Out-File -append -FilePath normalized.log -Encoding ascii

输入的片段&输出可以在这里看到:

http://pastebin.com/uaQadYUC

如何强制输出文件为ascii而不是某种类型的unicode?

***编辑:进一步的故障排除显示输入文件实际上是windows-1252编码,显然Get-Content本身无法处理(?)

3 个答案:

答案 0 :(得分:3)

您应该能够像... | Out-File -encoding ascii myfile.txt一样在out-file上使用编码标记。如果您使用的是append,请确保所有附加内容都使用相同的编码,否则最终会出现无法使用的文件。

答案 1 :(得分:0)

您可以使用ReadAllText方法吗?它将整个文件存储在一个字符串中。 Get-Content将值存储为字符串数组,其中数组值是文件的行。

(Get-ChildItem *.csv) |%{
#Store the name of the file & date
$Name = $_.basename
$FileDate = $_.CreationTime
#Prepends the following to each message: unique Identifer, Hostname, date
([IO.File]::ReadAllText($_.fullname)) -replace "^","AR-LOG|$Name|$FileDate|"
#Replaces the TAB delimeter with a Pipe delimeter
-replace '   ','|'  |
#Appends the resulting message in ascii
Out-File -append -FilePath normalized.log -Encoding ascii

答案 2 :(得分:0)

将文件格式从ASCII更改为UTF8

$filename = "c:\docs\demo.csv" (Get-Content $filename) | Set-Content $filename -Encoding UTF8