问题描述
我有一个程序会生成以下输出:
I have a program that generates the following output:
┌───────────────────────┐
│10 day weather forecast│
└───────────────────────┘
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
Tonight Sep 27 Clear 54 0 %
Tue Sep 28 Sunny 85/61 0 %
Wed Sep 29 Sunny 86/62 0 %
Thu Sep 30 Sunny 87/65 0 %
Fri Oct 01 Sunny 85/62 0 %
Sat Oct 02 Sunny 81/59 0 %
Sun Oct 03 Sunny 79/56 0 %
Mon Oct 04 Sunny 78/58 0 %
Tue Oct 05 Sunny 81/61 0 %
Wed Oct 06 Sunny 81/61 0 %
Last Updated Sep 27 10:20 p.m. CT
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
这似乎在本网站上格式不正确,但顶部的较低行和底部的较高行会导致unicode错误.
This doesn't seem to format right on this site, but the lower lines at the top and the upper lines at the bottom result in a unicode error.
这是os.popen的代码示例
Here is the code example for os.popen
>>> buffer = popen('10day', 'r').read()
Traceback (most recent call last):
File "/home/woodnt/python/10_day_forecast.py", line 129, in <module>
line_lower(51)
File "/home/woodnt/python/lib/box.py", line 24, in line_lower
print upper_line * len
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-50: ordinal not in range(128)
>>> print buffer
┌───────────────────────┐
│10 day weather forecast│
└───────────────────────┘
>>>
这与子流程相同.Popen:
Here is the same for subprocess.Popen:
f = Popen('10day', stdout=PIPE, stdin=PIPE, stderr=PIPE)
o, er = f.communicate()
print o
┌───────────────────────┐
│10 day weather forecast│
└───────────────────────┘
print er
Traceback (most recent call last):
File "/home/woodnt/python/10_day_forecast.py", line 129, in <module>
line_lower(51)
File "/home/woodnt/python/lib/box.py", line 24, in line_lower
print upper_line * len
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-50: ordinal not in range(128)
任何想法都可以在不进行大量幕后"工作的情况下实现吗?我只是在学习编程,并从python开始
Any ideas if this can be made to work without a lot of "under the hood" work? I'm just learning programming and starting with python
推荐答案
我说从控制台运行程序应该可以正常工作,因为Python可以猜测终端窗口的控制台编码(在美国Windows中为cp437),但是当通过管道运行Python使用默认的ascii.尝试将您的程序更改为将所有Unicode输出encode
转换为显式编码,例如:
I'd say running your program from the console should work correctly because Python can guess the console encoding of the terminal window (cp437 on US Windows), but when run through a pipe Python uses the default of ascii. Try changing your program to encode
all Unicode output to an explicit encoding, such as:
打印(upper_line * len).encode('cp437')
print (upper_line * len).encode('cp437')
然后,当您从管道读取它时,您可以decode
回到Unicode或直接将其打印到终端上.
Then when you read it from the pipe, you can either decode
back to Unicode or print it directly to the terminal.
这篇关于Python unicode popen或Popen错误读取unicode的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!