Python 仅当从其他程序运行时出现Unicode错误?

Python 仅当从其他程序运行时出现Unicode错误?,python,unicode,Python,Unicode,我有一个显示温度的有趣程序。一切都很好,直到我试着从康基那里使用它: Traceback (most recent call last): File "/home/naftuli/Documents/i7zdaemon/get-i7z-value", line 85, in <module> main() File "/home/naftuli/Documents/i7zdaemon/get-i7z-value", line 28, in main get_t

我有一个显示温度的有趣程序。一切都很好,直到我试着从康基那里使用它:

Traceback (most recent call last):
  File "/home/naftuli/Documents/i7zdaemon/get-i7z-value", line 85, in <module>
    main()
  File "/home/naftuli/Documents/i7zdaemon/get-i7z-value", line 28, in main
    get_temp_value(args)
  File "/home/naftuli/Documents/i7zdaemon/get-i7z-value", line 63, in get_temp_value
    print fmt % (temp if not args.in_fahrenheit else temp * (9.0/5.0) + 32, )
UnicodeEncodeError: 'ascii' codec can't encode character u'\xb0' in position 2: ordinal not in range(128)

最后一句话会毁掉一切。给出了什么?

尝试在src文件顶部设置编码,如下所示:

# coding: UTF-8

打印unicode时,必须对打印文本进行编码,以匹配输出流使用的任何编码。例如,对于Linux终端,现在通常是UTF-8

但是,当您使用不同的程序运行python脚本时,输出流编码(管道或程序窗口,而不是终端)可能会使用不同的编码。在本例中,似乎没有设置任何编码,python随后会退回到ASCII。无法将
\u00B0
字符编码为ASCII,编码失败

也许对于这个程序,打印小写的
o
就足够了

或者,如所示,显式编码为拉丁语1(ISO 8859-1)以输出度符号:

print (fmt % (temp if not args.in_fahrenheit else temp * (9.0/5.0) + 32, )).encode('latin1')
并且似乎暗示编码到UTF-8也是一个选项(取决于Conky配置)?将上述示例中的
latin1
替换为
utf8
,以尝试该编码


另请参见,它指定了如何处理输出编码。

这不会神奇地修复输出编码,这只适用于python读取源代码的方式。我所做的是在我的Conky配置中设置
覆盖\u utf8\u区域设置yes
,然后我修改了我的脚本,使其具有一个新的
——输出编码
参数,该参数默认为
utf8
。工作!谢谢
print (fmt % (temp if not args.in_fahrenheit else temp * (9.0/5.0) + 32, )).encode('latin1')