2016-07-21 6 views
6

पर मुझे एक जटिल परिस्थिति है कि मैं चरित्र एन्कोडिंग को शामिल करने का प्रयास कर रहा हूं।त्रिशंकु चरित्र एन्कोडिंग, जावा

मेरे पास एक पर्ल प्रोग्राम है जो एक जावा एंडपॉइंट के साथ त्रिभुज के माध्यम से संचार कर रहा है, जावा तब विरासत PHP सेवा के लिए अनुरोध करने के लिए डेटा का उपयोग कर रहा है। यह बदसूरत है, लेकिन माइग्रेशन प्लान का हिस्सा इसलिए थोड़ी देर के लिए काम करने की जरूरत है।

perl में एक थ्रिफ्ट ऑब्जेक्ट बनाया जाता है जहां थ्रिफ्ट ऑब्जेक्ट के कुछ फ़ील्ड जेसन एन्कोडेड स्ट्रिंग होते हैं। ,

'offer_message' => "<&lt;>&gt; 
&&amp; 
\x{c3}\x{82}\x{c2}\x{a9}&copy; 
<script>alert(\"XSS\");</script> 
https://url.com/imghp?hl=uk", 

हालांकि: (: डम्पर और बाद में json एन्कोड किया गया है और कहा कि बचत को यह से डेटा है)

समस्या है जब पर्ल जावा के लिए अनुरोध करता है, तार में से एक इस प्रकार है कि है

<&lt;>&gt;\\n&&amp;\\n���©&copy;\\n<script>alert(\"XSS\");</script>\\nhttps://www.google.com.ua/imghp?hl=uk 

: इस डेटा जावा तरफ अनुक्रम \ x {सी 3} \ x {82} \ x {c2} \ x {a9} तो जावा में हम निम्न प्राप्त बदल दिया गया है प्राप्त होने पर समस्या यह है कि यदि मैं विरासत php प्रोग्राम में दूसरी स्ट्रिंग पास करता हूं, तो यह विफल हो जाता है, अगर मैं पी के डंप से ली गई स्ट्रिंग पास करता हूं erl हैश, यह सफल होता है। तो मेरी धारणा यह है कि मुझे प्राप्त स्ट्रिंग को दूसरे एन्कोडिंग में परिवर्तित करने की आवश्यकता है (अगर मैं गलत हूं तो मुझे सही करें, मुझे यकीन नहीं है कि यह सही समाधान है)।

मैंने जावा में प्राप्त पैरामीटर लेने और उन सभी एन्कोडिंग में कनवर्ट करने का प्रयास किया है, जो मैं सोच सकता हूं, हालांकि यह काम नहीं करता है। तो उदाहरण के लिए:

byte[] utf8 = templateParams.getBytes("UTF8"); 
normallisedTemplateParams = new String(utf8, "UTF8"); 

मैं उम्मीद में एन्कोडिंग योजनाओं को बदल रहा हूं, मुझे कुछ ऐसा लगता है जो मुझे काम करता है।

इसे हल करने का सही तरीका क्या है? थोड़े समय के लिए यह गन्दा समाधान मेरा एकमात्र विकल्प है जबकि अन्य पुन: इंजीनियरिंग हो रहा है।

+0

हाँ क्षमा करें, यह मेरे लिए काफी नया है। पहली स्ट्रिंग पर्ल हैश का डेटा डंप है और उसे जेसन में परिवर्तित कर दिया जाता है और फिर एक थ्रिफ्ट ऑब्जेक्ट में जोड़ा जाता है और जावा को पास किया जाता है, दूसरी स्ट्रिंग जो मैं जावा पक्ष पर प्राप्त करता हूं। – mark

+0

मुझे लगता है कि समस्या यह है कि स्ट्रिंग को यूटीएफ -8 का उपयोग करके एन्कोड किया गया है, और यह नहीं होना चाहिए। 'utf8 :: डीकोड ($ एच {offer_message}); 'मदद कर सकता है। (यदि आप स्रोत पर डीकोड करते हैं तो यह बेहतर होगा।) – ikegami

+0

मैंने सोचा कि शायद समस्या ट्र्रिफ्ट धारावाहिकता के साथ थी, लेकिन मैं विश्वास करता हूं कि मैं जिस परली पक्ष पर एन्कोडिंग बदल सकता हूं। क्या आपके पास उपयोग करने के लिए बेहतर एन्कोडिंग का विचार है? – mark

उत्तर

1

अंत में समस्या का निदान करना मुश्किल है लेकिन हल करने में आसान है। यह पता चला कि जावा में कनवर्ट करने के लिए मैं जिस पैकेज का उपयोग कर रहा था वह यूटीएफ -16 के जावा के डिफ़ॉल्ट एन्कोडिंग का उपयोग कर रहा था। मुझे पैकेज को संशोधित करना था और इसे यूटीएफ -8 का उपयोग करने के लिए मजबूर करना पड़ा। उसके बाद, सब कुछ काम किया।

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