जावा -1252 और जावा में यूनिकोड को संभालें [बंद] - जावा, यूनिकोड, यूटीएफ -8, चरित्र-एन्कोडिंग, बाइटियर

Http अनुरोध के बाद, मुझे utf-8 के साथ एन्कोडेड बाइट सरणी मिली है, उदाहरण के लिए:

byte[] array = new byte[]{0xc3, 0xa4, 0xc2, 0x96}

मैं बाइट सरणी का उपयोग कर डीकोड new String(array, "utf-8")

उदाहरण में पहला डीकोडेड चार है 0xe4 जो पत्र का प्रतिनिधित्व करता है ä यूनिकोड में - अभी तक कोई समस्या नहीं है। दूसरा चार 0x96 एन डैश के लिए खड़ा है विंडोज -1252 में जबकि यह कुछ नियंत्रण चरित्र का प्रतिनिधित्व करता है spa start of guarded area यूनिकोड में।

चूंकि जावा यूनिकोड के रूप में चार को व्याख्या कर रहा है, मुझे कुछ अदृश्य चरित्र मिलता है।

मेरा प्रश्न: मैं प्राप्त करने के लिए बाइट सरणी को सही ढंग से कैसे डीकोड कर सकता हूं ä– (0xe4 0x2013 यूनिकोड में)।

मदद के लिए आपका अग्रिम धन्यवाद :)

उत्तर:

जवाब के लिए 2 № 1

ऐसा लगता है कि आपका सर्वर भ्रमित करता हैमालिकाना विंडोज -1252 कोड पेज के साथ आईएसओ-लैटिन -1 एन्कोडिंग और एन्कोडेड डेटा इसका परिणाम है। विंडोज -1252 कोड पेज केवल आईएसओ-लैटिन -1 से कुछ स्थानों पर अलग है।

आप उन्हें वापस बाइट्स में कनवर्ट करके डेटा को ठीक कर सकते हैं जिसे सर्वर ने गलत तरीके से ग्रहण लैटिन -1 का उपयोग करके देखा है और बाद में उन्हें CP1252 के रूप में समझते हैं:

String string = new String(array, "utf-8");
byte[] fix = string.getBytes(StandardCharsets.ISO_8859_1);
string = new String(fix, "Windows-1252");

संबंधित सवाल
सबसे लोकप्रिय