पिकुलियर समस्या, लेकिन मुझे लगता है कि मैं इसे यूटीएफ -8 और लैटिन -1 के उपयुक्त रूप से अपवित्र मिश्रण द्वारा पुन: उत्पन्न कर सकता हूं (हालांकि यूटीएफ -8 के केवल दो उपयोगों द्वारा लैटिन -1 में एक अंतरंग गलत कदम के बिना) । यहाँ पूरे अजीब राउंड ट्रिप (पायथन 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
Ã
से शुरू होने वाली अजीब स्ट्रिंग एन्क 2 के रूप में दिखाई देती है, यानी दो यूटीएफ -8 एन्कोडिंग मिश्रण में फेंकने वाले एक अंतरंग लैटिन -1 डिकोडिंग के साथ। और जैसा कि आप देख सकते हैं इसे ऑपरेशन के बिल्कुल-विपरीत अनुक्रम द्वारा पूर्ववत किया जा सकता है: utf-8 के रूप में डीकोड करें, लैटिन -1 के रूप में फिर से एन्कोड करें, फिर से utf-8 के रूप में फिर से डीकोड करें - और मूल स्ट्रिंग वापस है (yay !)।
मेरा मानना है कि लैटिन -1 (उर्फ आईएसओ -885 9 -1) और यूटीएफ -8 दोनों की सामान्य राउंड-ट्रिप गुणों की गारंटी होनी चाहिए कि यह अनुक्रम काम करेगा (क्षमा करें, अभी सी # उस भाषा में कोशिश करने के लिए नहीं , लेकिन मैं उम्मीद करता हूं कि एन्कोडिंग/डिकोडिंग अनुक्रम उपयोग में विशिष्ट प्रोग्रामिंग भाषा पर निर्भर नहीं होना चाहिए)।
स्रोत
2009-09-19 18:15:17
मुझे इस सवाल को ऊपर उठाना है, मुख्य रूप से क्योंकि यह एलेक्स के जवाब को प्रेरित करता है, जो कि बहुत ही निफ्टी है। साथ ही, एन्कोडिंग सामान्य रूप से एक मुश्किल व्यवसाय हो सकता है, क्योंकि मैंने अपनी मशीन पर सिर्फ एलेक्स के जवाब के साथ प्रयोग किया है। मुझे लगता है कि उनके दृष्टिकोण अन्य इंटरऑपरेबिलिटी संदर्भों में भी मदद कर सकता है (कम से कम एक सुराग के रूप में)। –