UTF-8 Python journalisation, comment?

J'essaie de connecter une codé en UTF-8 chaîne de caractères dans un fichier à l'aide de Python de journalisation de l'emballage. Comme un jouet par exemple:

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()

Cela explose avec UnicodeDecodeError sur le logging.info() l'appel.

À un niveau inférieur, Python de journalisation de package en utilisant le package de codecs pour ouvrir le fichier journal, en passant dans le "UTF-8" argument de l'encodage. C'est bien beau, mais c'est à essayer d'écrire des chaînes d'octets dans le fichier au lieu de l'unicode des objets, qui explose. Essentiellement, le Python est cela:

file_handler.write(unicode_string.encode("UTF-8"))

Quand il convient de le faire:

file_handler.write(unicode_string)

Est-ce un bug en Python, ou suis-je en prenant fou pilules? FWIW, c'est un stock de Python 2.6 installation.

  • Votre code fonctionne parfaitement bien ici. J'ai essayé de le faire échouer, mais je n'ai pas réussi.
  • Et vous avez raison, le python est l'encodage en UTF-8, car il demande de la outfile ce que le codage à utiliser, et que vous avez spécifié UTF-8, donc c'est tout et bien.
  • J'ai dû prendre la wayback machine de trouver le exemple vous l'avez mentionné. Intéressant.
InformationsquelleAutor Ted Dziuba | 2009-10-09