6

पर रीस्टलेट द्वारा स्कैम्बल हो रही है मेरे पास एपइंजिन पर होस्ट की गई एक सरल रीस्टलेट सेवा है। यह तारों के साथ मूल सीआरयूडी संचालन करता है और जब मैं इसे कर्ल (सभी क्रियाओं के लिए) के साथ परीक्षण करता हूं तो यूटीएफ -8 अक्षरों के सभी प्रकार के साथ अच्छी तरह से काम कर रहा है। ऊपरयूटीएफ -8 स्ट्रिंग्स जीएई

// set response type 
resp.setContentType("application/json"); 
// Create the client resource 
ClientResource resource = new ClientResource(Messages.SERVICE_URL + "myentity/id"); 
// Customize the referrer property 
resource.setReferrerRef("myapp"); 
// Write the response 
resource.get().write(resp.getWriter()); 

है काफी सब मैं सर्वलेट में है:

यह एक और AppEngine एप्लिकेशन पर एक सर्वलेट में आयोजित एक सरल restlet ग्राहक द्वारा सेवन किया जाता है। बहत सादा।

सर्वलेट jQuery ajax के माध्यम से शुरू हो जाती है, और json है कि मैं वापस पाने के अच्छी तरह से गठन किया गया और सब कुछ है, लेकिन समस्या यह है कि UTF-8 एन्कोडेड तार वापस तले आ रहे हैं, उदाहरण के लिए: Université de MontréalUniversit?? de Montr??al हो जाता है।

मैं (सब कुछ करने से पहले) सर्वलेट में इस लाइन को जोड़ने की कोशिश की:

resp.setCharacterEncoding("UTF-8"); 

लेकिन केवल diference कि बजाय ?? होने का मैं Universitᅢᄅ de Montrᅢᄅal मिल (मैं भी नहीं जानता कि पात्रों में से किस तरह उन है हैं, एशियाई मुझे लगता है)।

मुझे 100% यकीन है कि रीसेट सेवा ठीक है, क्योंकि लाइन से लाइन को डीबग करने के अलावा मैं इसे सीएमडी लाइन से कर्ल के साथ परीक्षण करने में सक्षम हूं और यह अच्छी तरह से गठित तारों को वापस कर रहा है।

फ़ायरफ़ॉक्स से प्रतिक्रिया के http शीर्षलेख को देखकर (जावास्क्रिप्ट के माध्यम से सर्वलेट को कॉल करते समय) मैं देख सकता हूं कि एन्कोडिंग वास्तव में यूटीएफ -8 है, जैसा कि अपेक्षित है। हर संभव संबंधित लेख को पढ़ने में संघर्ष के घंटों के बाद मैं this restlet discussion पर आया और देखा कि वास्तव में मेरे पास प्रतिक्रिया के http शीर्षलेख पर Transfer-Encoding: chunked है। मैं प्रस्तावित समाधान की कोशिश की (ओवरराइड ClientResource.toRepresentation, किसी भी अच्छे नहीं किया तो मैं करने की कोशिश की restlet 2.1 के रूप में ClientResource.setRe​questEntityBuffering​(true) साथ susggested, वहाँ कोई भाग्य या तो), लेकिन मैं अपने मुद्दे को आश्वस्त नहीं कर रहा हूँ सब परTransfer-Encoding: chunkedसे संबंधित है।

इस बिंदु पर मैं विचारों से बाहर हूं, और मैं वास्तव में किसी भी सुझाव की सराहना करता हूं!

o_O

अद्यतन:

मैं एक क्लासिक UrlConnection के साथ एक पुस्तिका प्राप्त कर की कोशिश की और स्ट्रिंग वापस ठीक आ रहा है: सब RESTful और फैंसी होने के लिए

URL url = new URL(Messages.SERVICE_URL + "myentity/id"); 
URLConnection conn = url.openConnection(); 
InputStream is = conn.getInputStream(); 

StringWriter writer = new StringWriter(); 
IOUtils.copy(is, writer, "UTF-8"); 

resp.getWriter().print(writer.toString()); 

इतना ... लेकिन अभी भी मुझे कोई संकेत नहीं है कि मूल संस्करण क्यों काम नहीं करता है! :/

+1

चंक किए गए स्थानांतरण एन्कोडिंग को वर्णमाला समस्याओं से असंबंधित होना चाहिए ... यदि आप कच्चे स्ट्रिंग को 'resp.getWriter()' में प्रश्न में कच्चे स्ट्रिंग को लिखते हैं, तो पूरी तरह से रीसेट को छोड़कर, क्या यह ठीक से स्थानांतरित हो जाता है? – bdonlan

+0

क्या आपका मतलब है 'मैनुअल' सर्वलेट से मेरी सेवा में मिलता है? – JohnIdol

+0

अपडेट देखें, अगर मैं रीसेटलेट बाईपास करता हूं तो यह ठीक काम करता है। मुझे लगता है कि यह एक रेस्टलेट बग या smt O_o – JohnIdol

उत्तर

1

मैं एक क्लासिक UrlConnection के साथ एक पुस्तिका प्राप्त कर की कोशिश की और स्ट्रिंग वापस ठीक आ रहा है: सब RESTful और फैंसी होने के लिए

URL url = new URL(Messages.SERVICE_URL + "myentity/id"); 
URLConnection conn = url.openConnection(); 
InputStream is = conn.getInputStream(); 

StringWriter writer = new StringWriter(); 
IOUtils.copy(is, writer, "UTF-8"); 

resp.getWriter().print(writer.toString()); 

इतना ... लेकिन फिर भी मैं कोई सुराग नहीं है यही कारण है कि मूल संस्करण काम नहीं करता है! :/

0

क्या आपकी प्रतिक्रिया में उचित "सामग्री-प्रकार" शीर्षलेख शामिल है? यह कुछ होना चाहिए "Content-Type: application/json; charset=UTF-8" (वर्णमाला नोट करें)।

अपने विकास सर्वर को शुरू करने का प्रयास करें और कर्सर का उपयोग करके कमांड लाइन से अपना संसाधन पुनर्प्राप्त करें और हेडर का निरीक्षण करें, उदा। curl -i http://localhost:8080/myentity/id। सिद्धांत रूप में ब्राउज़र को जेएसओएन के लिए यूटीएफ -8 मानना ​​चाहिए, लेकिन मुझे उस पर भरोसा नहीं होगा।

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