Tôi đang cố gắng ghi một chuỗi được mã hóa UTF-8 vào một tệp bằng gói ghi nhật ký của Python. Ví dụ về đồ chơi:UTF-8 Trong ghi nhật ký Python, làm cách nào?
import logging
def logging_test():
handler = logging.FileHandler("/home/ted/logfile.txt", "w",
encoding = "UTF-8")
formatter = logging.Formatter("%(message)s")
handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(logging.INFO)
# This is an o with a hat on it.
byte_string = '\xc3\xb4'
unicode_string = unicode("\xc3\xb4", "utf-8")
print "printed unicode object: %s" % unicode_string
# Explode
root_logger.info(unicode_string)
if __name__ == "__main__":
logging_test()
Điều này phát ra với UnicodeDecodeError on the logging.info().
Ở cấp độ thấp hơn, gói ghi nhật ký của Python đang sử dụng gói codec để mở tệp nhật ký, chuyển trong đối số "UTF-8" làm mã hóa. Đó là tất cả tốt và tốt, nhưng nó đang cố gắng để viết chuỗi byte vào tập tin thay vì đối tượng unicode, mà phát nổ. Về cơ bản, Python được làm điều này:
file_handler.write(unicode_string.encode("UTF-8"))
Khi nó nên làm điều này:
file_handler.write(unicode_string)
Đây có phải là một lỗi trong Python, hoặc tôi đang uống thuốc điên? FWIW, đây là bản cài đặt Python 2.6.
Mã của bạn làm việc hoàn toàn tốt đẹp ở đây . Tôi đã cố gắng để làm cho nó thất bại, nhưng tôi đã không thành công. –
Và bạn nói đúng, python đang mã hóa nó với UTF-8, bởi vì nó hỏi outfile mã hóa nào để sử dụng, và bạn đã chỉ định UTF-8, vì vậy đó là tất cả và tốt. –
Tôi phải nhấn máy quay lại để tìm [ví dụ] (http://web.archive.org/web/20100107060919/http://tony.czechit.net/2009/02/unicode-support-for-pythons -logging-library /) bạn đã đề cập. Hấp dẫn. – Epu