【问题标题】:Change encoding of Powershell created file to UTF8 instead of UCS-2 LE将 Powershell 创建的文件的编码更改为 UTF8 而不是 UCS-2 LE
【发布时间】:2016-09-29 10:03:28
【问题描述】:

我正在使用powershell创建一个文件,我需要这个文件是UTF8编码的,到目前为止我尝试过的所有尝试都失败了。

在 Notepad++ 中检查文件显示 UCS-2 LE BOM 作为编码。 powershell可以改用UTF8吗?

到目前为止,我已经尝试过 -encoding utf8,目前我正在使用[IO.File]::WriteAllLines($filename, $text)

可能存在导致问题的潜在问题(原谅我,对 Powershell 来说非常新),因为我在控制台中收到此错误,但是正在创建文件:

    Cannot process argument because the value of argument "path" is null. Change the value of argument "path" to a non-null value.
    + CategoryInfo          : InvalidArgument: (:) [Out-File], PSArgumentNullException
    + FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.OutFileCommand
    + PSComputerName        : 50.19.209.240

ChangeFileModeByMask error (3): The system cannot find the path specified.
    + CategoryInfo          : NotSpecified: (ChangeFileModeB...path specified.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
    + PSComputerName        : 50.19.209.240

编辑:

在给出答案后进行编辑以提供更多信息。

文件中的详细信息:

write-host "Creating Application.conf in UTF-8"
$filename = "c:\application.conf"
[IO.File]::WriteAllLines($filename, $text, [System.Text.Encoding]::UTF8) 

控制台中的输出仍然按照上述错误。

【问题讨论】:

    标签: powershell encoding utf-8


    【解决方案1】:

    你需要使用WriteAllLines的不同重载: File.WriteAllLines 方法(String, String[], Encoding),看这里:https://msdn.microsoft.com/en-us/library/3det53xh(v=vs.110).aspx

    会是:

    [IO.File]::WriteAllLines($filename, $text, [System.Text.Encoding]::UTF8)
    

    当然你也可以使用PS方式:

    $text | Out-File $filename -encoding Utf8
    

    【讨论】:

    • 嗨,Andrey,我已经尝试了这两个建议,后者是我最初的尝试,而前者是我刚刚尝试过的。我仍然在控制台中收到错误,它仍然在不需要的编码中创建它。你介意看看编辑过的帖子,看看是否有明显的错误吗?
    • 当然,段 '$text = "asdaasdad" $filename = "c:\GAAAAAH.conf" [IO.File]::WriteAllLines($filename, $text, [System. Text.Encoding]::UTF8) ' 本身工作正常。
    • 它在一个函数中,如果有帮助,它会在文件中调用。
    • 好吧,不,但是文件名变量在使用之前设置了行,它包含在同一个函数中,所以我不确定它怎么可能是空的? $filename = "c:\cfn\jars\CustomerStruggleStreaming\application.conf" 如果按照编辑的字面意思是前面的行
    • 这很奇怪,路径有效并且文件被创建。我不明白它怎么可以为空,然后在保存文件时使用它
    【解决方案2】:

    有什么特殊原因,您为什么使用 .net 类? 您也可以使用set-content cmdlet。

    "text" | Set-Content -Encoding UTF8 -Path "c:\path\file.txt"
    

    【讨论】:

    • 除了不知道有什么不同之外,没有其他原因。 :)
    • 目前没有,我选择了这个脚本,并负责进行一些更改。请您看一下编辑后的问题吗?
    • 这仍然会添加一个字节顺序标记,WriteAllLines 没有,尽管后者需要完整路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多