【问题标题】:Encoding of characters when running powershell script as python subprocess将powershell脚本作为python子进程运行时的字符编码
【发布时间】:2019-06-27 08:34:05
【问题描述】:

目前,我正在编写一个执行 PowerShell 脚本的小型 Python 应用程序。我的 python 脚本应该处理返回的字符串,但不幸的是,我在编码特殊字符时遇到了一些问题,如“ä”、“ö”、“Ü”等。如何返回 Unicode/UTF-8 字符串?

您可以在下面看到一个简单的示例。控制台输出为b'\xc7\xcf\r\n'。我不明白为什么不是b'\xc3\xa4\r\n',因为\xc3\xa4 应该是字符'ä' 的正确UTF8 编码。

try.py:

import subprocess
p = subprocess.check_output(["powershell.exe", ".\script.ps1"])
print(p)

script.ps1:

return 'ä'

我在某些方面采用了我的 PowerShell 脚本,但没有得到想要的结果。

  1. 已添加"[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8". Result: b'\xc3\x83\xc2\xa4\r\n'

  2. 返回return [System.Text.Encoding]::UTF8.GetBytes("ä"). Result: b'195\r\n131\r\n194\r\n164\r\n'

谁能帮助我的上层脚本获得'ä' 的控制台输出?

【问题讨论】:

标签: python powershell encoding character-encoding


【解决方案1】:

我使用“pwsh”是因为我在 mac 上运行它,您可以在代码中使用“powershell.exe” 试试这个:

import subprocess

p = subprocess.check_output(["pwsh", ".\sc.ps1"])
print(p.decode('utf-8'))

更多信息:您可以阅读here

Working Screenshot

【讨论】:

  • 我已经安装了 pwsh 并对其进行了测试,并将 print(p.decode('utf-8')) 添加到我的 try.py 脚本中。我从 pwsh 得到字符串 b'\x84\r\n' 和从 powershell b'\xc7\xcf\r\n'。 pwsh 的结果是:Traceback (most recent call last): b'\x84\r\n' print(p.decode('utf-8')) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x84 in position 0: invalid start byte
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多