【问题标题】:python: writing ★ in a filepython:在文件中写入★
【发布时间】:2018-07-30 11:35:36
【问题描述】:

我正在尝试使用:

text = "★"
file.write(text)

在 python 3 中。但我收到此错误消息:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0: ordinal not in range(128)

如何在python的文件中打印符号★?这与用作星级评定的符号相同。

【问题讨论】:

  • 您需要使用不同的编码。 with open('file.txt', 'w', encoding='utf-8') as f: f.write("★")
  • 只要 Python 存在,这些关于 Unicode 的令人讨厌的问题就会不断出现。我不明白 Python 没有做对,即使在 v3 中也是如此。
  • @nehemiah 我同意,我希望这在 python 中是自动的,所以程序员不需要照顾这些细节。

标签: python python-3.x file non-ascii-characters


【解决方案1】:

默认open使用平台默认编码(见docs):

encoding 是用于对文件进行解码或编码的编码名称。这应该只在文本模式下使用。默认编码取决于平台(无论locale.getpreferredencoding() 返回什么),但可以使用 Python 支持的任何文本编码。有关支持的编码列表,请参阅codecs 模块。

这可能不是您自己注意到的支持非 ascii 字符的编码。如果您知道您需要 utf-8,那么明确提供它总是一个好主意:

with open(filename, encoding='utf-8', mode='w') as file:
    file.write(text)

使用with 上下文管理器还可以确保周围没有文件句柄,以防您忘记关闭或在关闭句柄之前引发异常。

【讨论】:

    猜你喜欢
    • 2016-06-04
    • 1970-01-01
    • 2019-10-02
    • 2021-08-30
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多