【问题标题】:Unicode character with ordinal > 128 won't print after compiling with pyinstaller使用 pyinstaller 编译后,序数大于 128 的 Unicode 字符不会打印
【发布时间】:2018-11-28 20:34:36
【问题描述】:

我有以下:

blocky = u'\u2588'
print blocky

当我在命令行中运行它时,一切都很好:

# python foo.py
█

然后我运行pyinstaller foo.py。没有错误。当我运行可执行文件时,出现此错误:

# ./foo
Traceback (most recent call last):
  File "testall.py", line 2, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2588' in position 0: ordinal not in range(128)
[8029] Failed to execute script testall

我已经阅读了 python unicode how-to,但仍然很困惑。

编辑:为了澄清,我特别困惑为什么它在之前编译而不是之后

【问题讨论】:

标签: python-2.7 unicode pyinstaller


【解决方案1】:

好的,所以我找到了答案。很明显,python 对编码感到困惑,并且喜欢默认为 ascii。我相信添加初始u 是如何显式声明编码但我猜不是?反正修改成

blocky = u'\u2588'
print blocky.encode("utf-8")

解决了。

【讨论】:

  • 不,这并不能解决问题,尤其是在较新版本的 Python 中,您最终会尝试打印 bytes 对象。
  • 嗯,我刚刚试了一下,它奏效了。而且由于我正在编译,所以我并不担心 python 的版本。我仍然对为什么它在之前编译但不是在之后起作用感到困惑....
  • 它可能也不应该事先工作,但是您很幸运,因为您正在写入字节并且它们恰好是有效的 UTF-8,即使您没有对其进行编码。您几乎可以肯定使用的是 Python 2.x,并且没有在文件中设置正确的编码标记。
  • 是的,python 是 2.7,我的文件就是这两行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
相关资源
最近更新 更多