相关疑难解决方法(0)

PowerShell的UTF-8输出

我正在尝试使用Process.Start重定向的I/O来调用PowerShell.exe字符串,并以UTF-8的形式返回输出.但我似乎无法做到这一点.

我尝试过的:

  • 传递命令以通过-Command参数运行
  • 使用UTF-8编码将PowerShell脚本作为文件写入磁盘
  • 使用具有BOM编码的UTF-8将PowerShell脚本作为文件写入磁盘
  • 使用UTF-16将PowerShell脚本作为文件写入磁盘
  • 设置Console.OutputEncoding在这两个我的控制台应用程序,并在PowerShell脚本
  • $OutputEncoding在PowerShell中设置
  • 设置 Process.StartInfo.StandardOutputEncoding
  • Encoding.Unicode而不是做到这一切Encoding.UTF8

在每种情况下,当我检查我给出的字节时,我会得到与原始字符串不同的值.我真的很想解释为什么这不起作用.

这是我的代码:

static void Main(string[] args)
{
    DumpBytes("Héllo");

    ExecuteCommand("PowerShell.exe", "-Command \"$OutputEncoding = [System.Text.Encoding]::UTF8 ; Write-Output 'Héllo';\"",
        Environment.CurrentDirectory, DumpBytes, DumpBytes);

    Console.ReadLine();
}

static void DumpBytes(string text)
{
    Console.Write(text + " " + string.Join(",", Encoding.UTF8.GetBytes(text).Select(b => b.ToString("X"))));
    Console.WriteLine();
}

static int ExecuteCommand(string executable, string arguments, string workingDirectory, Action<string> output, Action<string> error)
{
    try
    {
        using …
Run Code Online (Sandbox Code Playgroud)

powershell encoding utf-8 character-encoding io-redirection

44
推荐指数
2
解决办法
10万
查看次数

在变量中存储 cmdlet 响应时出现 PowerShell 编码问题

我花了大约一个小时试图弄清楚这里发生了什么,但我根本无法找出原因,也没有意外地找到解决方法。

\n

当我运行时,winget upgrade返回的数据已正确编码:

\n

winget 响应已正确编码

\n

然而,如果我将 winget 升级的响应存储在变量 ( $winget = winget upgrade; $winget;) 中,某些字符会中断,这似乎是一个编码问题:

\n

winget 响应中有编码问题

\n

像这样的 cmdlet 将始终将字符串返回到 PowerShell,因此我猜想将响应分配给变量正在应用一些默认文本编码,也许来自我的 PowerShell 配置文件?我已经尝试将大多数常见代码投射到变量上,但最终会完全破坏数据。

\n

我什至以每种可能的编码类型转储了数据,但它们都已损坏:

\n
winget upgrade | Out-File -FilePath C:\\tmp\\test1.txt -Encoding ascii\nwinget upgrade | Out-File -FilePath C:\\tmp\\test3.txt -Encoding default\nwinget upgrade | Out-File -FilePath C:\\tmp\\test4.txt -Encoding string\nwinget upgrade | Out-File -FilePath C:\\tmp\\test5.txt -Encoding unicode\nwinget upgrade | Out-File -FilePath C:\\tmp\\test7.txt -Encoding utf32\nwinget upgrade | Out-File -FilePath C:\\tmp\\test8.txt -Encoding utf7\nwinget upgrade | Out-File -FilePath C:\\tmp\\test9.txt -Encoding utf8\n …
Run Code Online (Sandbox Code Playgroud)

powershell encoding character-encoding powershell-cmdlet

2
推荐指数
1
解决办法
677
查看次数