Domanda

Al momento sto lavorando su un bot IRC per un canale multi-lingua, e sto incontrando alcuni problemi con Unicode che si stanno rivelando quasi impossibile da risolvere.

Non importa quale sia la configurazione di codifica Unicode mi sembra di provare, la funzione di lista che il codice qui sotto si trova all'interno solo flat out non fa nulla (c.notice è una funzione classe che invia un comando AVVISO al server IRC) o quando non fare qualcosa, sputa fuori qualcosa che ovviamente non è codificato.

Il comando deve essere l'invio 天子, ma invece sembra determinato a inviare å¤ © å con una precedente configurazione degli stessi comandi. Quello che ho specificato di seguito è di tipo 'inviare nulla'. Non ho lavorato con Unicode prima di questo, e quindi sono abbastanza bloccato. Sono anche positivo che sto facendo questo completamente sbagliato di conseguenza.

(compileCMD richiede solo una lista e sputa fuori una singola stringa di tutti gli elementi all'interno della lista)

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))
È stato utile?

Soluzione

A pochi punti:

  • I byte "å¤ © A" sono la codifica UTF-8 di "天子", così sei sicuro che sia sbagliato che questo viene inviato? Il programma di / ... che deve elaborare l'uso di dati UTF-8, o lo fa solo interpretare l'input come una codifica diversa come Latin-1?
  • unicode(uk,"utf-8").encode("utf-8"):. Decodifica UTF-8 e quindi ricodifica come UTF-8 non cambia nulla
  • ukeys = unicode(uk,"utf-8").encode("utf-8"): La variabile ukeys che contiene i dati ricodificati non è utilizzato in seguito.

Altri suggerimenti

Si scopre che il problema era con il cliente che stavo usando per testare l'output - che non ha gestito correttamente unicode stesso

Modificare questa:

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

in questo modo:

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

e riprovare. Assicurarsi che uk è già una stringa di codifica UTF-8 (non Unicode).

Si considera che il metodo di c.notice prende una stringa codificata come argomento, dal momento che è avuto modo di inviare una stringa codificata sul filo. Se il canale è multilingue, è una scommessa sicura che si aspetta di essere codificato come UTF-8. Inoltre, cadere la linea ukeys = unicode(uk,"utf-8").encode("utf-8") inutile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top