2012-10-04 14 views
22

में यूटीएफ -8 एन्कोडिंग मेरे पास JSP पृष्ठ है जिसका पृष्ठ एन्कोडिंग ISO-8859-1 है। यह जेएसपी पृष्ठ एक प्रश्न उत्तर ब्लॉग में है। मैं क्यू/ए पोस्टिंग के दौरान विशेष पात्रों को शामिल करना चाहता हूं।जेएसपी पृष्ठ

समस्या यह है कि जेएसपी UTF-8 एन्कोडिंग का समर्थन नहीं कर रहा है, यहां तक ​​कि मैंने इसे ISO-8859-1 से UTF-8 में बदल दिया है। ये वर्ण (~, %, &, +) समस्या बना रहे हैं। जब मैं इन चरित्रों को व्यक्तिगत रूप से या किसी भी चरित्र के संयोजन के साथ पोस्ट कर रहा हूं, तो यह डेटाबेस में storinh null है और जब मैं एप्लिकेशन पोस्ट करते समय इन वर्णों को हटा देता हूं तो यह ठीक काम कर रहा है।

क्या कोई भी कुछ समाधान सुझा सकता है?

+0

शो आप इसे डीबी में स्टोर करते हैं, आप इसे डीबी से जेएसपी – MaVRoSCy

+0

से कैसे चलाते हैं यह एक बहुत लंबा कोड है जिसे मैं यहां पेस्ट नहीं कर सकता लेकिन मैं आपको प्रवाह बता सकता हूं। उपयोगकर्ता किसी jsp पेज (a.jsp) से किसी प्रश्न के उत्तर पोस्ट कर रहा है। मैं सभी मान एक tester.js फ़ाइल (सबमिट पर) पर ले रहा हूं, तो ये मान छिपे हुए जेएसपी पेज पर जा रहे हैं, फिर मैं डेटा पोस्ट करने के लिए जावा विधि को बुला रहा हूं। यदि कोई उपयोगकर्ता पोस्ट कर रहा है (&&&&&&&) tester.js फ़ाइल तक मान आ रहा है लेकिन छिपे हुए जेएसपी पृष्ठ पर मान भेजने के बाद सभी मान शून्य हो जाते हैं। (केवल उपरोक्त वर्ण के मामले में विशेष चरित्र आराम ठीक काम कर रहा है)। – Shailendra

+0

कृपया tester.js की विधि पोस्ट करें जो सबमिशन – MaVRoSCy

उत्तर

4

तुम्हें यकीन फ़ाइल किया गया है UTF-8 एन्कोडिंग के साथ बचाया करना है। आप इसे कई सादे पाठ संपादकों के साथ कर सकते हैं। नोटपैड ++ के साथ, यानी, आप मेनू Encoding ->Encode in UTF-8 में चुन सकते हैं। आप इसे विंडोज़ नोटपैड (Save As -> एन्कोडिंग यूटीएफ -8) के साथ भी कर सकते हैं। यदि आप ग्रहण का उपयोग कर रहे हैं, तो आप इसे फ़ाइल की गुणों में सेट कर सकते हैं।

इसके अलावा, यह जांचें कि समस्या यह है कि आपको से बचने के लिए उन पात्रों से बचें। यह अजीब बात नहीं होगी कि आपकी समस्या थी, क्योंकि पात्रों में से एक & है।

48

आप सभी परतों अपने आवेदन की पर समान कूट का उपयोग इस समस्या से बचने के लिए करना चाहिए।

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
throws ServletException 
{ 
    request.setCharacterEncoding("UTF-8"); 
    chain.doFilter(request, response); 
} 
केवल अपने JSP पृष्ठों पर एन्कोडिंग सेट करने के लिए

, उन्हें इस पंक्ति जोड़ें::

<%@ page contentType="text/html; charset=UTF-8" %> 

ही चार उपयोग करने के लिए अपने डेटाबेस को कॉन्फ़िगर यह एक filter जोड़ने के लिए एन्कोडिंग सेट करने के लिए उपयोगी है एन्कोडिंग भी।

आप कन्वर्ट करने के लिए की जरूरत है एक स्ट्रिंग की एन्कोडिंग देखें:

मैं अपने डेटाबेस में HTML इनकोडिंग पाठ स्टोर करने के लिए सिफारिश नहीं होगा। उदाहरण के लिए, यदि आपको पीडीएफ (या HTML के अलावा कुछ भी) उत्पन्न करने की आवश्यकता है तो आपको पहले HTML एन्कोडिंग को कन्वर्ट करने की आवश्यकता है।

+0

को संभालती है, क्या आप थोड़ा और समझ सकते हैं क्योंकि मैं इस समस्या के लिए नया हूं। फ़िल्टर कहां जोड़ें। – Shailendra

+0

विस्तृत जानकारी और उदाहरण के लिए http://stackoverflow.com/tags/servlet-filters/info –

3

यह एक आम मुद्दा है।

हल करने का सबसे आसान तरीका यह है कि यह जांचने के लिए कि क्या विशेष वर्ण क्रिया परत के अंदर पहुंच रहा है और फिर जावा कोड में विशेष चरित्र को संशोधित कर रहा है या नहीं।

आप कार्रवाई में इस चरित्र या अपनी पसंद (व्यापार परत की तरह) के किसी भी अन्य जावा परत देखने में सक्षम हैं, तो बस इसी StringEscapeUtils.html#escapeHtml

का उपयोग कर भागने करने के बाद एचटीएमएल चरित्र के साथ चरित्र बदल दें। डीबी में सहेजने के लिए नई स्ट्रिंग का उपयोग करें।

+0

अच्छी तरह से मुझे आपका समाधान मिला है लेकिन मैं व्यवसाय परत में विशेष चरित्र प्राप्त करने में सक्षम नहीं हूं। जावा कक्षा में आने से पहले यह जेएसपी में खो रहा है। – Shailendra

+0

@ShailendraDubey hmmm तारीख को फॉर्म में होना चाहिए था और एक्शन लेयर तक पहुंच गया था, क्या आप उस पर दोबारा जांच कर सकते हैं। यदि यह नहीं आ रहा है, तो क्या आप कोड या कुछ नमूना कोड (पूरे जेएसपी सहित) के कुछ विवरण डाल सकते हैं। –

24

पूर्ण JSP टैग, कुछ इस तरह होना चाहिए pageEncoding भी मन: भी एन्कोडिंग के साथ

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 

कुछ पुराने ब्राउज़र गंदगी। > पाठ फ़ाइल इनकोडिंग - आप फ़ाइल> गुण> की जाँच पर छोड़ दिया क्लिक करें HTML टैग

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

भी फ़ाइल को UTF-8 प्रारूप में दर्ज किया जाना चाहिए, आप ग्रहण उपयोग कर रहे हैं का उपयोग कर सकते हैं।

+1

"<मेटा वर्णसेट = यूटीएफ -8>" पर्याप्त है। – Timo

+0

सभी मामलों में नहीं। पूर्व। यदि आपकी परियोजना डिफ़ॉल्ट रूप से यूटीएफ -8 नहीं है। [डॉक्टर यहाँ] (http://docs.oracle.com/cd/B14099_19/web.1012/b14014/jspnls.htm#i1005593) – PbxMan

+1

वह पृष्ठ एन्कोडिंग ने मेरे लिए यह किया। मेटा टैग अकेले नहीं था। – Thomas

4

यह धागा आप मदद कर सकते हैं: Passing request parameters as UTF-8 encoded strings

असल:

request.setCharacterEncoding("UTF-8"); 
String login = request.getParameter("login"); 
String password = request.getParameter("password"); 

या आप jsp फ़ाइल पर जावास्क्रिप्ट का उपयोग करें:

var userInput = $("#myInput").val();    
var encodedUserInput = encodeURIComponent(userInput); 
$("#hiddenImput").val(encodedUserInput); 

और बाद वर्ग पर की वसूली:

String parameter = URLDecoder.decode(request.getParameter("hiddenImput"), "UTF-8"); 
+0

इसके अलावा, मैंने server.xml के टैग _ _ में पैरामीटर _URIEncoding = "UTF-8" _ जोड़ा है (मेरे मामले में, मैं अपाचे टॉमकैट का उपयोग कर रहा हूं) – dellasavia

+0

यह समाधान ठीक है, लेकिन आप वेब में वैश्विक कॉन्फ़िगरेशन जोड़ सकते हैं। एक वर्ण एन्कोडिंगफिल्टर जोड़कर एक्सएमएल, बस इस लिंक का पालन करें [https://stackoverflow.com/a/30276333 ](https://stackoverflow.com/a/30276333) –

10

मुझे "Ṁ Ů" जैसे चेरेक्टर प्रदर्शित करने में भी कोई समस्या थी। मैंने अपने web.xml में निम्नलिखित जोड़ा।

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group> 
</jsp-config> 

इसने हेडर को छोड़कर पृष्ठों में समस्या हल की। इसे हल करने के कई तरीकों का प्रयास किया और मेरे मामले में कुछ भी काम नहीं किया। हेडर के साथ समस्या हेडर जेएसपी पेज किसी अन्य जेएसपी से शामिल है। तो आयात को एन्कोडिंग दिया और मेरी समस्या हल हो गई।

<c:import url="/Header1.jsp" charEncoding="UTF-8"/> 

धन्यवाद

+0

इस संकेत के लिए धन्यवाद। यह भी आवश्यक था और लगता है कि प्रत्येक एकल जेएसपी फ़ाइल में <% @ पेज पेज एन्कोडिंग = "यूटीएफ -8"%> लिखने से बचने के लिए लगता है (केवल समस्या मेरे मामले में थी कि यह परिवर्तन केवल टॉमकैट और ब्राउज़र- के दो पुनरारंभ होने के बाद प्रभावी हुआ। कैश और सीधे नहीं ...) – leole

0

मैं JSP पर डिलीमीटर के रूप में विशेष वर्ण का उपयोग कर एक ही समस्या थी। जब विशेष पात्रों को सर्वलेट में पोस्ट किया गया, तो वे सब गड़बड़ हो गए। मैं निम्नलिखित रूपांतरण का उपयोग करके समस्या हल हो जाती: इस खोल स्क्रिप्ट

String str = new String (request.getParameter("string").getBytes ("iso-8859-1"), "UTF-8"); 
0

मैं जोड़ने से

#!/bin/sh 

############################################### 
## this script file must be placed in the parent 
## folder of the to folders "in" and "out" 
## in contain the input jsp files 
## out will containt the generated jsp files 
## 
############################################### 

find in/ -name *.jsp | 
    while read line; do 
     outpath=`echo $line | sed -e 's/in/out/'` ; 
     parentdir=`echo $outpath | sed -e 's/[^\/]*\.jsp$//'` ; 
     mkdir -p $parentdir 
     echo $outpath ; 
     iconv -t UTF-8 -f ISO-8859-1 -o $outpath $line ; 
    done 
3

मैं एन्कोडिंग फिल्टर का उपयोग किया जो मेरे सारे एन्कोडिंग समस्या को हल किया है jsp फ़ाइलों को कनवर्ट करने ...

package com.dina.filter; 

    import java.io.IOException; 
    import javax.servlet.Filter; 
    import javax.servlet.FilterChain; 
    import javax.servlet.FilterConfig; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 

    /** 
    * 
    * @author DINANATH 
    */ 
    public class EncodingFilter implements Filter { 

     private String encoding = "utf-8"; 

     public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 
      request.setCharacterEncoding(encoding); 
    //    response.setContentType("text/html;charset=UTF-8"); 
        response.setCharacterEncoding(encoding); 
      filterChain.doFilter(request, response); 

     } 

     public void init(FilterConfig filterConfig) throws ServletException { 
      String encodingParam = filterConfig.getInitParameter("encoding"); 
      if (encodingParam != null) { 
       encoding = encodingParam; 
      } 
     } 

     public void destroy() { 
      // nothing todo 
     } 

    } 
web.xml में

<filter> 
     <filter-name>EncodingFilter</filter-name> 
     <filter-class> 
     com.dina.filter.EncodingFilter 
     </filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>EncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
0

सभी संकेतों के लिए धन्यवाद। Tomcat8 का उपयोग करके मैंने @Jasper de Vries जैसे एक फ़िल्टर को भी लिखा था। लेकिन नए टॉमकैट्स में आजकल एक फ़िल्टर पहले ही कार्यान्वित किया गया है जिसे टॉमकैट वेब में बस असम्बद्ध किया जा सकता है।एक्सएमएल:

<filter> 
    <filter-name>setCharacterEncodingFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
    <async-supported>true</async-supported> 
</filter> 
... 
<filter-mapping> 
    <filter-name>setCharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

और अन्य सभी पोस्ट की तरह; मैंने अपाचे में टॉमकैट कनेक्टर को URIEncoding="UTF-8" जोड़ा। इससे भी मदद मिली।

महत्वपूर्ण कहने के लिए, कि ग्रहण (यदि आप इस का उपयोग करें) अपने web.xml की एक प्रति है और बिलाव-सेटिंग अधिलेखित कर देता है के रूप में यह यहाँ समझाया गया था: कोड आप डेटा प्राप्त करते हैं, कैसे के रूप में Broken UTF-8 URI Encoding in JSPs

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