Python3.7 和计划任务的 Unicode 问题
Unicode issue with Python3.7 and Scheduled Tasks
我正在尝试使用子进程
收集Python中计划任务的名称
import subprocess
import sys
encoding = 'utf-8'
cmd = r'''$env:PYTHONIOENCODING = "%s";py -3 -c "print('® ¾ ü_ä_ö')"'''% encoding
#cmd = r'''$env:PYTHONIOENCODING = "%s"; schtasks /query ''' % encoding
data = subprocess.check_output(["powershell", "-C",cmd])
print((data.decode(encoding)))
当我执行虚拟 cmd(打印 Unicode)时,这工作正常。但是当我尝试 运行 schtasks 命令时(某些任务如 intel 和其他任务在任务名称中使用 ® 等 unicode 符号或 ü_ä_ö 等字符)。
这给了我以下错误:
UnicodeDecodeError:'utf-8'编解码器无法解码位置 1228 中的字节 0x81:起始字节无效
如果我 运行 直接从 cmd 提示符或 powershell 命令,它显示正常:
C:\Users\ricar\Google Drive\Bifrost\Collectors>schtasks /query
Folder: \
TaskName Next Run Time Status
======================================== ====================== ===============
Adobe Acrobat Update Task 12/4/2020 8:00:00 AM Ready
AdobeAAMüpdater-1.0-MicrosoftAccount-ric 12/4/2020 2:00:00 AM Ready
AdobeGCInvoker-1.0 12/5/2020 12:30:00 AM Ready
HPPSDrTelemetryWatch© 12/12/2020 12:00:00 AM Ready
Intel-IMSS® N/A Ready
知道我做错了什么吗?
谢谢
您确定 schtasks
输出是 utf-8 格式吗?
0x81 在 IBM CP437 和 IBM CP850 / IBM CP858 编码中是 ü。
为了检查这一点,实用的方法是使用 repr()
或输出字符代码的 decode(encoding, errors=...)
选项之一打印字符串(例如 decode(encoding, errors='xmlcharrefreplace')
) , 然后将它与编码表进行匹配,看看哪个匹配。
我正在尝试使用子进程
收集Python中计划任务的名称import subprocess
import sys
encoding = 'utf-8'
cmd = r'''$env:PYTHONIOENCODING = "%s";py -3 -c "print('® ¾ ü_ä_ö')"'''% encoding
#cmd = r'''$env:PYTHONIOENCODING = "%s"; schtasks /query ''' % encoding
data = subprocess.check_output(["powershell", "-C",cmd])
print((data.decode(encoding)))
当我执行虚拟 cmd(打印 Unicode)时,这工作正常。但是当我尝试 运行 schtasks 命令时(某些任务如 intel 和其他任务在任务名称中使用 ® 等 unicode 符号或 ü_ä_ö 等字符)。
这给了我以下错误:
UnicodeDecodeError:'utf-8'编解码器无法解码位置 1228 中的字节 0x81:起始字节无效
如果我 运行 直接从 cmd 提示符或 powershell 命令,它显示正常:
C:\Users\ricar\Google Drive\Bifrost\Collectors>schtasks /query
Folder: \
TaskName Next Run Time Status
======================================== ====================== ===============
Adobe Acrobat Update Task 12/4/2020 8:00:00 AM Ready
AdobeAAMüpdater-1.0-MicrosoftAccount-ric 12/4/2020 2:00:00 AM Ready
AdobeGCInvoker-1.0 12/5/2020 12:30:00 AM Ready
HPPSDrTelemetryWatch© 12/12/2020 12:00:00 AM Ready
Intel-IMSS® N/A Ready
知道我做错了什么吗?
谢谢
您确定 schtasks
输出是 utf-8 格式吗?
0x81 在 IBM CP437 和 IBM CP850 / IBM CP858 编码中是 ü。
为了检查这一点,实用的方法是使用 repr()
或输出字符代码的 decode(encoding, errors=...)
选项之一打印字符串(例如 decode(encoding, errors='xmlcharrefreplace')
) , 然后将它与编码表进行匹配,看看哪个匹配。