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')