Question

Je travaille actuellement sur un bot irc pour un canal en plusieurs langues, et je rencontre quelques problèmes avec unicode qui se révèlent presque impossible à résoudre.

Peu importe la configuration de l'encodage unicode me semble essayer, la fonction de la liste dont le code ci-dessous se trouve à l'intérieur ne vient à plat rien (c.notice est une fonction de classe qui envoie une commande AVIS au serveur irc) ou lorsqu'il ne fait quelque chose, recrache quelque chose qui est évidemment pas codé.

La commande devrait envoyer 天子, mais il semble Hellbent sur l'envoi å¤ © å avec une configuration précédente des mêmes commandes. Celui que je l'ai indiqué ci-dessous est de la variété «rien envoyer. Je ne l'ai pas travaillé avec unicode avant cela, et donc je suis tout à fait bloqué. Je suis aussi positif que je fais cela tout à fait tort en conséquence.

(compileCMD prend juste une liste et une seule recrache chaîne de tous les éléments de la liste)

uk = self.compileCMD(self.faq.keys(),0)
ukeys = unicode(uk,"utf-8").encode("utf-8")
c.notice(nick, u"Current list of faq entries: %s" % (uk))
Était-ce utile?

La solution

Quelques points:

  • Les octets « å¤ © å » sont le codage UTF-8 de « 天子 », donc vous êtes sûr qu'il est faux que cela est envoyé? Le programme / ... qui devrait traiter de l'utilisation des données UTF-8, ou il n'interprète simplement l'entrée comme un codage différent comme le latin-1?
  • unicode(uk,"utf-8").encode("utf-8"). Décodage UTF-8 et réencodage puis en UTF-8 ne change rien
  • ukeys = unicode(uk,"utf-8").encode("utf-8"): La variable ukeys qui contient les données réencodés n'est pas utilisé plus tard.

Autres conseils

Transforme le problème était avec le client que j'utilisais pour tester la sortie - il n'a pas été correctement manipulation unicode lui-même

Changer ceci:

u"Current list of faq entries: %s" % (uk)

dans ceci:

"Current list of faq entries: %s" % (uk)

et essayez à nouveau. Assurez-vous que uk est déjà une chaîne codée UTF-8 (non unicode).

Je suppose que la méthode c.notice prend une chaîne codée comme argument, car il est arrivé à envoyer une chaîne codée sur le fil. Si le canal est multilingue, il y a fort à parier qu'il l'attend à coder en UTF-8. De plus, laissez tomber la ligne ukeys = unicode(uk,"utf-8").encode("utf-8") inutile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top