Domanda

Ho un problema con le stringhe che ricevo da uno dei miei clienti oltre XMLRPC. mi manda stringhe UTF8 che sono codificati due volte :( così quando li ricevo in python ho un oggetto unicode che deve essere decodificato una volta, ma ovviamente python non permetterlo. Ho notato il mio cliente però ho bisogno fare soluzione rapida per il momento prima che lo fissa.

stringa crudo di discarica tcp:

<string>Rafa\xc3\x85\xc2\x82</string>

questo viene convertito in:

u'Rafa\xc5\x82'

Il meglio che otteniamo è:

eval(repr(u'Rafa\xc5\x82')[1:]).decode("utf8") 

Il risultato è corretto stringa che è:

u'Rafa\u0142' 

questo funziona però è brutto come l'inferno e non può essere utilizzato nel codice di produzione. Se qualcuno sa come risolvere questo problema in modo più adatto si prega di scrivere. Grazie, Chris

È stato utile?

Soluzione

>>> s = u'Rafa\xc5\x82'
>>> s.encode('raw_unicode_escape').decode('utf-8')
u'Rafa\u0142'
>>>

Altri suggerimenti

Yow, che è stato divertente!

>>> original = "Rafa\xc3\x85\xc2\x82"
>>> first_decode = original.decode('utf-8')
>>> as_chars = ''.join([chr(ord(x)) for x in first_decode])
>>> result = as_chars.decode('utf-8')
>>> result
u'Rafa\u0142'

Così si fa la prima decodifica, ottenendo una stringa Unicode in cui ogni personaggio è in realtà un valore di byte UTF-8. Si va via il valore intero di ciascuno di questi personaggi per tornare a una vera e propria stringa UTF-8, che poi decodificare come normale.

>>> weird = u'Rafa\xc5\x82'
>>> weird.encode('latin1').decode('utf8')
u'Rafa\u0142'
>>>

latin1 è solo l'abbreviazione per il metodo nuts'n'bolts di Richie.

E 'molto curioso che il codec raw_unicode_escape seriamente sotto-descritto dà lo stesso risultato di latin1 in questo caso. Non danno sempre lo stesso risultato? Se sì, perché avere un tale codec? In caso contrario, sarebbe preferibile sapere con certezza esattamente come cliente del PO ha fatto la trasformazione da 'Rafa\xc5\x82' a u'Rafa\xc5\x82' e poi invertire quel processo esattamente - altrimenti potrebbe venire scollarsi se i dati diverse colture prima la codifica doppia è fisso

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