特有の問題ですが、UTF-8とLatin-1を適切に組み合わせることで再現できると思いますが(UTF-8を2回使用するだけでなく、 。ここでは全体の奇妙な往復(* 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として表示されます。つまり、ミックスに投じられた散在したlatin-1のデコードを伴う2つのutf-8エンコーディングです。そして、あなたが見ることができるように、正確に逆の操作のシーケンスによって取り消すことができます:utf-8としてデコードし、latin-1として再エンコードし、utf-8として再度デコードして、元の文字列を返します!)。
Latin-1(別名ISO-8859-1)とUTF-8の通常のラウンドトリッププロパティは、このシーケンスが動作することを保証する必要があります(申し訳ありません。しかし、私は、エンコーディング/デコードシーケンスは、使用されている特定のプログラミング言語に依存すべきではないと期待しています)。
私はこの質問をupvoteする必要があります。これは主にアレックスの答えを促したからです。これはかなり面白いです。また、エンコーディングは、私自身のマシンでAlexの答えを実験するだけで再発見したので、一般的に扱いにくいビジネスになる可能性があります。彼のアプローチが他の相互運用性の文脈でも(少なくとも手がかりとして)役立つかもしれないという気持ちがある。 –