मैं एक बाहरी वेब सेवा है कि मुझे गलत तरीके से एन्कोड (और या भ्रष्ट) दे रही है स्ट्रिंग्स (UTF-8
) है कि सबसे अधिक संभावना या तो ISO LATIN
या WINDOWS-1252
लेकिन अब UTF-8
हैं के साथ काम कर रहा हूँ का उपयोग कर गलत तरीके से एन्कोड पाठ ठीक करने के लिए (और या आईएसओ/विन्डोज़/यूटीएफ -8 का मिश्रण)। लवली एक टोपी (Â
) बहुत अधिक है।जावा पुस्तकालय heuristics
मैं स्पष्ट रूप से यह तय नहीं कर सकता कि बाहरी वेब सेवा अपने तारों को कैसे स्टोर करती है ताकि जानकारी खो जाए। इस प्रकार मुझे पता है कि 100% अनुवाद की उम्मीद संभव नहीं है।
लेकिन मुझे आशा थी कि किसी ने जावा में एक ह्यूरिस्टिक कैरेक्टर मैपिंग लाइब्रेरी लिखी होगी (इसकी संभावना है कि कोई एक टोपी टाइप करेगा)।
यदि नहीं मुझे लगता है मैं बंदरगाह इस लोग PHP कोड कर सकते हैं: https://stackoverflow.com/a/3521340/318174
अद्यतन और स्पष्टीकरण: @VGR की तरह एक साधारण रूपांतरण के साथ जवाब काम नहीं करेगा। मेरे पास मूल बाइट्स नहीं हैं। डेटा को एंडपॉइंट पर गलत रूप से परिवर्तित किया गया था (SOAP सर्वर शायद getBytes(/*with out correct encoding*/)
किया गया था या हो सकता है कि डेटा गलत प्रारूप में संग्रहीत हो)। जब आप बाइट्स को जावा में स्ट्रिंग्स में कनवर्ट करते हैं तो डेटा को तब तक नहीं रखा जाता है जब तक कि एन्कोडिंग हर जगह समान न हो। अगर आप ASCII
< ->UTF-8
जैसे कुछ के बारे में सोचते हैं तो यह समझना आसान है। Windows-1252
या ISO Latin
के साथ यह बहुत अधिक जटिल है क्योंकि डेटा खो नहीं गया है लेकिन अक्सर उलझन में है। ऐसा इसलिए है क्योंकि उन एन्कोडिंग दो बाइट्स हो सकते हैं और UTF-8
का सबसेट नहीं हैं।
यदि आप मुझ पर विश्वास नहीं करते हैं तो आप getBytes()
को विभिन्न एन्कोडिंग के साथ आगे करने का प्रयास कर सकते हैं और डेटा भ्रष्टाचार और डेटा हानि देखेंगे।
मैं देना चाहिए मुझे परेशान यह हमेशा मुझे गुस्सा दिलाती है जब कुछ एक वोट बाहर एक लिखने के लिए बंद करने के लिए: यदि आप UTF-8 बाइट्स है कि अलग-अलग पात्रों के रूप में पारित किए गए है, तो आप सिर्फ ऐसा करने में सक्षम होना चाहिए टिप्पणी। –