2009-09-04 16 views
5

मेरे पास एक जेएसपी पृष्ठ डेटा पुनर्प्राप्त कर रहा है और जब पाठ में सिंगल या डबल कोट्स हैं तो वे इस प्रतीक के रूप में प्रदर्शित होते हैं।जेएसपी एकल और डबल कोट्स को प्रतीक के रूप में प्रदर्शित करता है

JSP कोड:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title>General</title> 
    </head> 
    <body> 
     <h1> <%= order.getDescription %> </h1> 
    </body> 
</html> 

उदाहरण: एक आदेश का वर्णन, इस तरह दिखना चाहिए

"20 - 4" x 6 "विगेट्स"

लेकिन मैं इस मिल रहा है,

"20 - 4 x 6 विजेट्स"

नोट: मैं डेटा में संशोधन नहीं कर सकता अपमानित करना।

[संपादित करें]

मैं पात्रों से बचने के लिए आम-lang-2.4.jar का इस्तेमाल किया और इन मुझे मुसीबत देने प्राथमिक चरित्र:

  1. & # 145 -> ‘
  2. & # 146 -> ’
  3. & # 147 -> “
  4. & # 148 -> ”
  5. & # 150 -> –

मैं तथापि, मैं सिर्फ एक के लिए पात्रों पर एक की जगह किया था कुछ प्रारूप में यकीन है कि अन्य पात्रों मुझे मुद्दों देना होगा हूँ, अस्थायी फिक्स और मैं वर्तमान में नीचे दिए गए सुझावों का परीक्षण कर रहा हूं।

[समाधान के लिए कोड]

यह शायद नहीं सबसे अच्छा यह करने के लिए जिस तरह से है, लेकिन यह काम किया गया। डाटाबेस से डेटा पुनर्प्राप्त होने के बाद नीचे दिया गया कोड बैकिंग बीन में है।

description = StringEscapeUtils.escapeHtml(description); 

description = description.replaceAll("&#145;", "&quot;"); 
description = description.replaceAll("&#146;", "&quot;"); 
description = description.replaceAll("&#147;", "&quot;"); 
description = description.replaceAll("&#148;", "&quot;"); 
description = description.replaceAll("&#150;", "-"); 

description = StringEscapeUtils.unescapeHtml(description); 

उत्तर

1

ये शायद आपके डेटाबेस में गैर-मानक वर्ण हैं ... शायद सीधे ऊपर और नीचे वाले दिशात्मक दिशात्मक उद्धरण?

इसे संभालने का एक सीधा-आगे तरीका, क्योंकि आप डेटाबेस में डेटा नहीं बदल सकते हैं, केवल "खराब" वर्णों को स्वैप करने के लिए प्रतिस्थापन या regex का उपयोग करना होगा जो सही तरीके से प्रदर्शित होंगे।

+0

यह सही जवाब नहीं है लेकिन यह मेरे समाधान का कारण बनता है। –

0

00 9 4 एक घुंघराले डबल उद्धरण है। एक विधि लिखें सीधे दोहरे-उद्धरण, या HTML के लिए इकाई से बदलने के लिए घुंघराले दोहरे-उद्धरण: &rdquo; या &#x94, प्रदर्शित करता है जो की तरह: 4 ” x 6 ”

8

चरित्र U + 0094 है, जो एक बड़े पैमाने पर है कि उपयोग नियंत्रण कोड। यदि आप वास्तव में विंडोज कोडपेज 1252 (पश्चिमी यूरोपीय) में बाइट्स को डीकोड करने के लिए आईएसओ -885 9 -1 का उपयोग करते हैं तो आपको आमतौर पर दुर्घटना से इस श्रेणी में वर्ण मिलेंगे। वे समान एन्कोडिंग होते हैं और अक्सर एक दूसरे के साथ भ्रमित होते हैं, लेकिन 0x80-0x9F श्रेणी में प्रतीकों अलग हैं।विंडोज सीपी 1252 स्मार्ट कोट्स जैसी चीजों के लिए उनमें से कुछ का उपयोग करता है, जो आपको शायद यहां अपेक्षित है: एक डबल-क्लोज-कोट (", यू + 201 डी दाइट डबल कोटेशन मार्क)।

इस तरह की भ्रम है कि अधिकांश वेब ब्राउज़र, जब एक वेब पेज आईएसओ -885 9 -1 है, तो वास्तव में इसके बजाय सीपी 1252 का उपयोग करेगा और उद्धरण प्रस्तुत करेगा। तो यह शायद एक मार्कअप-साइड मुद्दा नहीं है।

आपके पास शायद एक डेटाबेस है जिसमें CP1252 है, और डेटा एक्सेस लेयर जो आईएसओ -885 9 -1 का उपयोग करके स्ट्रिंग में बाइट्स को परिवर्तित कर रहा है - शायद इसलिए कि यह सर्वर का डिफ़ॉल्ट एन्कोडिंग है। आदर्श रूप में आप यूनिकोड स्ट्रिंग को मूल रूप से स्टोर करने के लिए डेटाबेस को कॉन्फ़िगर करना चाहते हैं, लेकिन यदि आप ऐसा नहीं कर सकते हैं तो आपको आईएसओ -885 9 -1 के बजाय CP1252 एन्कोडिंग का उपयोग करने के लिए अपने डेटाबेस कनेक्टर को कॉन्फ़िगर करने का एक तरीका होगा। आप यह कैसे करते हैं इस पर निर्भर करता है कि आप किसके साथ कनेक्ट कर रहे हैं; आपको एक संपत्ति सेट करना पड़ सकता है, या कनेक्शन स्ट्रिंग में पैरामीटर शामिल करना पड़ सकता है।

आप नहीं कर सकते हैं कि आपके डेटा परत के साथ, केवल एक ही चीज़ छोड़ दिया मैन्युअल रूप से अधिक के साथ सभी स्ट्रिंग मान आप डेटाबेस से मिल जाने के लिए और उन्हें वापस वे क्या किया जाना चाहिए करने के लिए ट्रांसकोड, एन्कोडिंग द्वारा करने के लिए है के बारे में एक आईएसओ -885 9 -1 एन्कोडिंग, सीपी 1252 के साथ डीकोडिंग के बाद। यह करने के लिए एक असली दर्द होगा, लेकिन एक अंतिम उपाय के रूप में काम करेगा।

[साइड-इश्यू: क्लोज-डबल-कोट इंच को इंगित करने के लिए गलत वर्ण है। "(यूनिकोड यू + 2033 डबल प्राइम) सबसे अच्छा होगा, लेकिन यदि आप विरासत एन्कोडिंग तक सीमित हैं, तो सीधे" डबल-कोट करेगा।]

+0

मुझे लगता है कि आपका निदान थोड़ा सा है - परिणाम को देखते हुए, उसे सही स्ट्रिंग में यूनिकोड डेटा मिला है, लेकिन यह सीपी 1252 में एन्कोड किया गया है लेकिन मेटाडेटा के अनुसार यूटीएफ -8 का उपयोग करके डीकोड किया गया है - अधिक के लिए मेरा उत्तर देखें। – McDowell

+0

यह मेरी तत्काल प्रतिक्रिया थी लेकिन मुझे नहीं लगता कि वास्तव में यह हो रहा है कि क्या हो रहा है। यदि आप एक यूटीएफ -8 पृष्ठ में एक अमान्य अनुक्रम जैसे लोन 0x94 बाइट शामिल करते हैं, तो अधिकांश ब्राउज़र आपको एक प्रतिस्थापन चरित्र, जैसे कि '?' या ' ', वास्तविक नियंत्रण चरित्र नहीं 'जैसा प्रश्न में पोस्ट किया गया है । बेशक यह हमेशा इस तरह के प्रश्नों के साथ थोड़ा मुश्किल है क्योंकि इन प्रकार के पात्र आसानी से यहां चिपकने से पहले उलझ जाते हैं ... – bobince

+0

आह, हाँ, आप सही हैं; मैं recant। – McDowell

0

0094 जैसा कि इंगित किया गया है, सीधे डबल कोट नहीं है। कि वहाँ एक अलग बोली का उपयोग कर के साथ एक समस्या है, लेकिन 0094 सबसे फोंट में उपलब्ध नहीं है -।। only some east asian fonts seem to have this character वास्तव में, यह चरित्र रद्द जो control character category में गिरता है, और नहीं initial quote या final quote चरित्र श्रेणियों है

यह एक अपेक्षाकृत अप्रयुक्त चरित्र भी है, हालांकि it is present in the Latin-1 supplement यूनिकोड ब्लॉक। तो आप इस चरित्र को संभालने के लिए एक फ़िल्टर (इनपुट या आउटपुट) लगा सकते हैं।

इनपुट फ़िल्टर केवल वर्णों की एक श्वेतसूची लगाएगा जो आपका एप्लिकेशन स्टोर करेगा, और स्पष्ट रूप से प्रदर्शन में समर्थन करेगा।

आउटपुट फ़िल्टर मूल रूप से यूनिकोड वर्णों को प्रतिस्थापित करेगा जो आपको बेहतर प्रकार के साथ समस्याएं देते हैं।

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