2012-04-04 18 views
26

मैं खुद को जवाब नहीं ढूंढ पाया। ऑब्जेक्ट्स को क्रमबद्ध करने और deserialize करने के लिए ऑब्जेक्टमैपर का उपयोग करते समय जैकसन को यूटीएफ -8 एन्कोडिंग का उपयोग करने का कोई तरीका है?जैक्सन ऑब्जेक्टमैपर?

धन्यवाद

उत्तर

39

जैक्सन स्वचालित रूप से स्रोत में प्रयुक्त एन्कोडिंग का पता लगाता है: JSON विनिर्देश के अनुसार, केवल वैध एन्कोडिंग UTF-8, UTF-16 और UTF-32 है। कोई अन्य एन्कोडिंग (जैसे लैटिन -1) का उपयोग किया जा सकता है। इस वजह से, ऑटो-डिटेक्शन पार्सर द्वारा आसान और किया जाता है - इस कारण से कोई एन्कोडिंग पहचान स्वीकार नहीं की जाती है। तो, यदि इनपुट यूटीएफ -8 है, तो इसका पता लगाया जाएगा।

आउटपुट के लिए, यूटीएफ -8 डिफ़ॉल्ट है; लेकिन यदि आप स्पष्ट रूप से किसी अन्य एन्कोडिंग का उपयोग करना चाहते हैं, तो आप JsonGenerator स्पष्ट रूप से (JsonEncoding लेते हुए एक विधि के साथ) बना सकते हैं, और इसे ObjectMapper पर पास कर सकते हैं।

वैकल्पिक रूप से दोनों मामलों में आप मैन्युअल रूप से java.io.Reader/java.io.Writer बना सकते हैं, और इसे जो भी एन्कोडिंग चाहते हैं उसका उपयोग कर सकते हैं।

+1

मुझे यकीन नहीं है कि यूटीएफ -8 डिफ़ॉल्ट कैसे हो सकता है, जब मैंने यूटीएफ -16 के बजाय यूएसएफ -8 में जेएसओएन को एन्कोड करने के लिए घंटे बिताए हैं। – cbmanica

+3

@cbmanica ट्रस्ट मुझे, यूटीएफ -8 जैक्सन के लिए पूर्ण डिफ़ॉल्ट है जब आप 'java.io.OutputStream' देते हैं। लेकिन अन्य डिफ़ॉल्ट भी हैं: यदि आप 'राइटर' उदाहरण स्वयं बनाना चुनते हैं, या कुछ अन्य lib/ढांचे का निर्माण करते हैं तो जेडीके का डिफ़ॉल्ट एन्कोडिंग होता है। ये जैक्सन के बाहर हैं। – StaxMan

+0

@cbmanica क्या आप कृपया अपना कोड साझा कर सकते हैं जिसने आपकी मदद की? ऐसा लगता है कि मेरे पास एक ही समस्या है। – Tregoreg

संबंधित मुद्दे