Странная проблема, но я думаю, что я могу воспроизвести ее с помощью подходяще-нечестивой смеси UTF-8 и Latin-1 (но не только двумя использованиями UTF-8 без перемежающегося ошибочного шага в Latin-1). Вот странный круговорот, «туда и обратно» (Python 2. * или IronPython должны быть в состоянии воспроизвести это):
# -*- 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
Это интересный вывод ...:
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
Странная строка, начинающаяся с Ã
, выглядит как enc2, то есть два кодирования utf-8 с декодированием с перемежением latin-1, добавляемым в микс. И, как вы можете видеть, это может быть отменено с помощью точно противоположной последовательности операций: декодировать как utf-8, перекодировать как latin-1, повторно декодировать как utf-8 снова - и исходная строка вернется (yay !).
Я полагаю, что обычные свойства в обоих направлениях для Latin-1 (также известный как ISO-8859-1) и UTF-8 должны гарантировать, что эта последовательность будет работать (извините, пока нет C #, чтобы попробовать на этом языке сейчас, но я ожидаю, что последовательности кодирования / декодирования не должны зависеть от конкретного используемого языка программирования).