Próbuję zalogować łańcuch kodowany w UTF-8 do pliku przy użyciu pakietu logowania Pythona. Jako zabawny przykład:UTF-8 W logowaniu Python, jak?
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()
To eksploduje za pomocą UnicodeDecodeError w wywołaniu logging.info().
Na niższym poziomie pakiet rejestrowania w języku Python używa pakietu kodeków do otwarcia pliku dziennika, przekazując jako argument kodowanie "UTF-8". Wszystko dobrze i dobrze, ale próbuje napisać ciągi bajtów do pliku zamiast do obiektów unicode, które eksplodują. Zasadniczo, Python robi to:
file_handler.write(unicode_string.encode("UTF-8"))
Kiedy należy to zrobić:
file_handler.write(unicode_string)
Jest to błąd w Pythonie, albo ja biorąc szalone pigułki? FWIW, to jest instalacja Pythona 2.6.
Twój kod działa perfekcyjnie tutaj . Bardzo się starałem, aby to się nie udało, ale mi się nie udało. –
I masz rację, Python koduje go za pomocą UTF-8, ponieważ prosi o plik wyjściowy, jakiego kodowania użyć, i podałeś UTF-8, więc wszystko jest w porządku. –
Musiałem uderzyć w maszynę dojazdową, aby znaleźć [przykład] (http://web.archive.org/web/20100107060919/http://tony.czechit.net/2009/02/unicode-support-for-pythons -logowanie-biblioteka /), o którym wspomniałeś. Ciekawy. – Epu