编辑包含二进制部分的ASCII编码文本文件

时间:2016-08-30 14:52:13

标签: powershell

使用Powershell,我想使用:

编辑文件
Get-Content $inputFile | ForEach-Object {
    $_.Replace("|Foo;","|Bar;")
} | Out-File $outputFile

此文件采用ASCII编码,但包含二进制部分

使用Notepad ++进行相同的替换工作!

将inputFile和outputFile与Notepad ++进行比较我有一些我不想要的更改:

  • 输出文件长度(字符数)从二进制部分行数增长

  • 更改之前Notepad ++检测到End of Line为" UNIX",之后为Dos \ Windows(但文件使用CRLF = Windows EOL)

  • 在二进制部分,Notepad ++显示" CR"或" LF"转型前的EOL," CRLF" EOL

很明显,Powershell会将一些二进制字符转换为Windows End Of Line。

如何避免它?

转型前: Before the transformation

转型后: After the transformation

1 个答案:

答案 0 :(得分:0)

感谢wOxxOm给了我解决方案:

    [IO.File]::WriteAllText(`
        $outputFile, `
        [IO.File]::ReadAllText($inputFile,[Text.Encoding]::GetEncoding("iso-8859-1")).Replace("|Foo;","|Bar;"),`
        [Text.Encoding]::GetEncoding("iso-8859-1")
    )