Problema particolare, ma penso di poterlo riprodurre con un miscuglio appropriato di UTF-8 e Latin-1 (non con solo due usi di UTF-8 senza un mis-step intervallato in Latin-1) . Ecco tutto il viaggio di andata strano "andata e ritorno di nuovo" (Python 2. * o IronPython dovrebbe sia essere in grado di riprodurre questo):
# -*- coding: utf-8 -*-
uni = u'Újratárgyalja'
enc1 = uni.encode('utf-8')
enc2 = enc1.decode('latin-1').encode('utf-8')
dec3 = enc2.decode('utf-8')
dec4 = dec3.encode('latin-1').decode('utf-8')
for x in (uni, enc1, enc2, dec3, dec4):
print repr(x), x
Questa è l'uscita interessante ...:
u'\xdajrat\xe1rgyalja' Újratárgyalja
'\xc3\x9ajrat\xc3\xa1rgyalja' Újratárgyalja
'\xc3\x83\xc2\x9ajrat\xc3\x83\xc2\xa1rgyalja' Ãjratárgyalja
u'\xc3\x9ajrat\xc3\xa1rgyalja' Ãjratárgyalja
u'\xdajrat\xe1rgyalja' Újratárgyalja
La stringa strana che inizia con Ã
appare come enc2, cioè due codifiche utf-8 con una decodifica latin-1 intervallata gettata nel mix. E come puoi vedere, può essere annullato dalla sequenza di operazioni esattamente inverse: decodifica come utf-8, ri-codifica come latin-1, ri-decodifica come utf-8 di nuovo - e la stringa originale è tornata (yay !).
Credo che le normali proprietà di round-trip sia di Latin-1 (ovvero ISO-8859-1) sia di UTF-8 dovrebbero garantire che questa sequenza funzioni (scusa, nessun C# intorno a provare in quella lingua in questo momento , ma mi aspetto che le sequenze di codifica/decodifica non dipendano dallo specifico linguaggio di programmazione in uso).
fonte
2009-09-19 18:15:17
devo upvote questa domanda, soprattutto perché ha spinto la risposta di Alex, che è dannatamente ingegnoso. Inoltre, la codifica può essere un affare complicato in generale, poiché ho riscoperto solo sperimentando la risposta di Alex sulla mia macchina. Ho la sensazione che il suo approccio possa aiutare (almeno come indizio) anche in altri contesti di interoperabilità. –