Toujours coder unicode en octets.
Dans cette direction, vous aurez à choisir l'encodage.
>>> u"你好".encode("utf8")
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print _
你好
L'autre façon est de décoder des octets unicode.
Dans ce sens, vous devez savoir ce qu'est l'encodage.
>>> bytes = '\xe4\xbd\xa0\xe5\xa5\xbd'
>>> print bytes
你好
>>> bytes.decode('utf-8')
u'\u4f60\u597d'
>>> print _
你好
Si vous voyez d'autres combinaisons en python 2.x, c'est à dire my_byte_string.encode()
ou my_unicode_string.decode()
, alors la personne qui a écrit le code ne savais pas vraiment ce qu'ils faisaient, et a été tout simplement jouer unicode whack-a-mole.
En le voyant, .encode
sur une chaîne d'octets, python essaie d'abord de convertir implicitement à une unicode. De même, en le voyant, .decode
sur une chaîne unicode, python implicitement essaie de le convertir en octets de la première.
Donc - pourquoi êtes-vous Unicode Décoder Erreur lorsque vous avez appelé coder? Ici, UnicodeDecodeError
est dû au fait que coder la fonction normalement prend un paramètre de type unicode. L'obtention d'un str
paramètre, l'encode() fonction convertit en format avant la conversion vers un autre codage. La conversion-choisit un défaut ascii décodeur†, vous donnant l'erreur de décodage à l'intérieur d'un encodeur.
†...ou quel que soit le codage sys.getdefaultencoding()
mentions; d'habitude, c'est 'ascii'