gpt4 book ai didi

python - 我应该将编码 ='utf-8' 添加到我的 Python 日志记录处理程序吗?

转载 作者:太空狗 更新时间:2023-10-29 21:09:57 25 4
gpt4 key购买 nike

假设我想在使用 Python 2.7 进行日志记录时处理 Unicode 字符串。将编码参数添加到 FileHandler 似乎是“正确的”。

# coding=utf-8
import logging

logger = logging.getLogger()
logger.addHandler(logging.FileHandler('my_log.txt', encoding='utf-8'))

logger.error(u'Pão')
logger.error('São')

不过这有几个问题:

  1. 它在 UTF-8 字符串文字“São”上引发 UnicodeDecodeError。
  2. 输出文件在 Windows 上有 LF 行结尾,这时 CRLF 似乎更合适。

但是,如果我根本不传递任何编码,那么我就不会遇到这些问题。两个字符串都记录到一个 UTF-8 文件中,我得到 CRLF 行结尾。 (我认为行结束问题与指定编码时以二进制模式打开文件有关。)

由于省略编码似乎效果更好,是否有某种原因让我想念永远传递encoding='utf-8'

最佳答案

如果您将编码传递给 FileHandler,它会使用带有该编码的 codecs.open() 打开文件;否则,它使用普通的 open()。这就是所有 encoding 的用途。

请记住,Python 2.x 在正确处理字节和 Unicode 方面并不理想:在不同时间会发生隐式编码和解码,这会让您感到困惑。在大多数情况下,您真的不应该将像“São”这样的字符串作为字节传递:如果它是文本,您应该使用 Unicode 对象。

至于行尾 - 这通常由 Python 的文件 I/O 机制转换为特定于平台的行尾。但是如果使用codecs.open(),则底层文件以二进制模式打开,所以没有将\n翻译成\r\n 发生,就像它通常在 Windows 上一样。

关于python - 我应该将编码 ='utf-8' 添加到我的 Python 日志记录处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com