Problema peculiar, pero creo que puedo reproducirlo con una mezcla no apropiada de UTF-8 y Latin-1 (no solo con dos usos de UTF-8 sin un paso incorrecto intercalado en Latin-1) . Aquí está todo el viaje redondo raro "y volver de nuevo" (Python 2. * o IronPython debe tanto ser capaces de reproducir este):
# -*- 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
Ésta es la salida interesante ...:
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 secuencia extraña que comienza con Ã
aparece como enc2, es decir, dos codificaciones utf-8 CON una decodificación intercalada de latin-1 arrojada a la mezcla. Y como pueden ver, puede deshacerse mediante la secuencia de operaciones exactamente inversa: decodificar como utf-8, volver a codificar como latin-1, volver a decodificar como utf-8 de nuevo y la cadena original está de vuelta (yay !).
Creo que las propiedades normales de ida y vuelta de Latin-1 (también conocido como ISO-8859-1) y UTF-8 deberían garantizar que esta secuencia funcionará (lo siento, no hay C# para probar en ese idioma en este momento , pero esperaría que las secuencias de codificación/decodificación no dependan del lenguaje de programación específico en uso).
Tengo que votar esta pregunta, principalmente porque provocó la respuesta de Alex, que es bastante increíblemente ingeniosa. Además, la codificación puede ser un asunto complicado en general, ya que redescubrí solo experimentar con la respuesta de Alex en mi propia máquina. Tengo la sensación de que su enfoque podría ayudar (al menos como pista) en otros contextos de interoperabilidad también. –