我有一个简单的python脚本foo.py
,它输出一个unicode字符:
import sys
print(sys.stdout.encoding)
print(b'\xe2\x96\x88'.decode('utf8'))
我想在powershell中运行它,并通过管道将输出发送到写入主机:
PS> c:\python37\python.exe foo.py | Write-Host
如果我这样做,结果是:
Traceback (most recent call last):
File ".\pyen.py", line 3, in <module>
print(b'\xe2\x96\x88'.decode('utf8'))
File "C:\python37\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2588' in position 0: character maps to <undefined>
cp1252
事实证明,这甚至不是一个写主机问题。只需将输出赋给一个变量,或将其管道化为Out Null,就会产生相同的错误:
PS> c:\python37\python.exe foo.py | Out-Null #Same error
PS> $a = c:\python37\python.exe foo.py #Same error
PS> c:\python37\python.exe foo.py #No error, stdout encoding is printed as utf-8
我不明白为什么会这样。Powershell为许多事情选择默认的windows代码页(cp1252)。你知道吗
这个答案提供了几个解决方案:Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)
不幸的是,将我的$PROFILE
更改为设置输入和输出编码没有帮助。你知道吗
在这个答案中,启用utf-8全系统这个更持久的解决方案确实解决了这个问题,但这是一个beta特性,可能会破坏其他功能,所以我不想走这条路。你知道吗
我还尝试过设置python环境变量来编码或修改python源代码,但这些都不是很好的答案,因为这意味着要调整或更改任何python代码,我希望通过管道将其输出写入宿主。你知道吗
有什么想法吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐