在Windows中将文件转换为Unix格式时如何避免字符转换

时间:2019-02-28 05:58:54

标签: powershell batch-file

我编写了一个PowerShell脚本,使用以下代码将文件从Windows转换为Unix。

while ($line = $tempfile.ReadLine()) {
    $outstream.Write($line + "`n")
}

如果数据文件中没有特殊字符,则可以正常工作。 现在,如果数据文件中有一些特殊字符,它们将按以下方式转换:

test‡testtest¿½test
test,testtest¿½test

有没有建议如何在不转换任何字符的情况下实现它?

注意:我不想使用dos2unix,因为此exe在服务器上不存在。所以我需要批处理脚本或PowerShell中的解决方案。

2 个答案:

答案 0 :(得分:0)

不确定这是您的问题,但我认为它只是编码。

尽管:

$tempfile = [System.IO.StreamReader]("d:\temp\test.txt")
$tempfile.ReadLine()

您可以尝试:

Get-Content 'D:\temp\test.txt' -encoding UTF8

然后使用:

$tempfile = New-Object  System.IO.StreamReader "d:\temp\test.txt", $([System.Text.Encoding]::UTF8)
$tempfile.ReadLine()

可用的编码:

  

ASCII; Unicode; BigEndianUnicode; UTF32; UTF7; UTF8;默认(对于OEM)

答案 1 :(得分:0)

您是否尝试过[io.file]?似乎没有这些问题。

$txt = [io.file]::ReadAllText('E:\temp\dos.txt') -replace "`r`n","`n"
[io.file]::WriteAllText('e:\temp\unix.txt', $txt)

从这里: how to convert a file from DOS to Unix