2012-04-20 11 views
9

मेरे पास एक सूची है जिसमें सभी आइटम डायक्रिटिक्स के साथ ठीक से दिखाए जाते हैं क्योंकि वे स्थानीय रूप से और जेबॉस सर्वर पर डीबी में हैं।सीएसवी एन्कोडिंग समस्याओं को निर्यात करना

हालांकि, जेबॉस सर्वर पर, जब मैं सीएसवी के रूप में निर्यात करने की कोशिश करता हूं तो सभी डायक्रिटिक्स पात्रों को प्रतिस्थापित किया जाता है, इसलिए मुझे शकोला के बजाय Ã ~~coala की तरह कुछ मिलता है, हालांकि सूची में डाइक्रिटिक्स ठीक से दिखाए जाते हैं।

स्थानीय रूप से दोनों सूचीबद्ध और निर्यात में दिखाए गए ठीक काम करता है।

private void Export() { 
    String exportAs = (String) m_ExportForm.getField("exportType").getValue(); 
    FormItem item = m_ExportForm.getField("showInWindow"); 
    boolean showInWindow = item.getValue() == null ? false : (Boolean) item.getValue(); 

    // exportAs is either XML or CSV, which we can do with requestProperties 
    Map<String,String> params= new java.util.HashMap<String, String>(); 
    params.put("Accept-Charset","utf-8"); 

    DSRequest dsRequestProperties = new DSRequest(); 
    dsRequestProperties.setHttpHeaders(params); 
    dsRequestProperties.setExportValueFields(true); 
    dsRequestProperties.setExportAs((ExportFormat)EnumUtil.getEnum(ExportFormat.values(), exportAs)); 
    dsRequestProperties.setExportDisplay(showInWindow ? ExportDisplay.WINDOW : ExportDisplay.DOWNLOAD); 

    // TODO: move in user-config 
    dsRequestProperties.setExportTitleSeparatorChar("_"); 
    dsRequestProperties.setExportDelimiter(";"); 

    dsRequestProperties.setExportFilename("export." + extensionsValueMap.get(exportAs)); 
    dsRequestProperties.setContentType("text/csv; charset=UTF-8"); 
    m_Target.Export(dsRequestProperties); 

    Close(); 
} 

इसके अलावा, मेरी jboss 7 संपत्ति फ़ाइल में मैं इस किया है::

यहाँ निर्यात के लिए मेरी कोड है

<system-properties> 
    <property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/> 
    <property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/> 
</system-properties> 

जो काम करता है के रूप में listgrids विशेषक ठीक से दिखाई देते हैं।

इसके अलावा, मेरे web.xml में मैं अपने सर्वलेट

<init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
</init-param> 

शायद मैं गलत रास्ते पर हूँ के लिए है और इस में कुछ और कारण होता है।

दोनों फाइल स्थानीय रूप से निर्यात की गई हैं और jboss सर्वर से निर्यात की गई फ़ाइल में सटीक फ़ाइल आकार है।

इसके अलावा, मेरी Jboss JVM के लिए मैं java_opts

-Dfile.encoding=UTF-8 

संपादित करें के लिए गुण सेट: सुझाव के कारण पैरामीटर नक्शा गयी। अब तक कुछ भी नहीं।

+0

क्या यह आपको कुछ अंतर्दृष्टि दे सकता है? https://community.jboss.org/message/646601 – Phani

+0

HTTP अनुरोध और प्रतिक्रिया शीर्षलेख कैप्चर करें और उन्हें पोस्ट करें। साथ ही, CSV के बाइट्स में फ़ाइल आकार पोस्ट करें, आप उस काम को डाउनलोड करते हैं और जिस पर '??' है। –

उत्तर

2

ऐसा लगता है जैसे यह एक वर्ण एन्कोडिंग/डिकोडिंग समस्या है।

आपके कोड ने यूटीएफ -8 एन्कोडिंग में एक CSV फ़ाइल जेनरेट की है। हालांकि, आप पर सीएसवी पढ़ने के लिए किस प्रोग्राम का उपयोग कर रहे हैं? विंडोज नोटपैड? यदि यह एक विंडोज़ एप्लीकेशन है, संभावना है कि यह मान रहा है कि टेक्स्ट फ़ाइल ISO-8859-1 एन्कोडिंग में है।

विकल्प 1:

टेल नोटपैड या अपने विंडोज़ अनुप्रयोग एन्कोडिंग। नोटपैड के साथ, फ़ाइल/ओपन संवाद में एक एन्कोडिंग ड्रॉपडाउन है। इसे यूटीएफ -8 पर स्विच करें।

विकल्प 2:

बदलें UTF-8 से ISO-8859-1 को अपने स्रोत कोड में एन्कोडिंग है, जो विंडोज 'डिफ़ॉल्ट एन्कोडिंग मेल खाता है। लाइन बदलने:

dsRequestProperties.setContentType("application/csv; charset=UTF-8"); 

dsRequestProperties.setContentType("application/csv; charset=ISO-8859-1"); 

को उम्मीद है कि चाल करेंगे। org.apache.catalina.connector.URI_ENCODING सेटिंग फ़ाइल एन्कोडिंग को प्रभावित नहीं करती है और इसे छोड़ दिया जाना चाहिए।

+0

समस्या स्थानीय रूप से है जहां मेरे पास फ़ाइल डाउनलोड करने पर utf-8 में jvm एन्कोडिंग है, मुझे फ़ाइल को डायक्रिटिक्स के साथ मिलता है जो ठीक है। अगर मैं अपने जेबॉस सर्वर पर एक ही काम करता हूं तो फ़ाइल पहले से ही बिना किसी लेखक के सहेजी जाती है। यह फ़ाइल पढ़ने की बात नहीं है। – Fofole

+0

@ फोफोल, जेबॉस सर्वर डाउनलोड की गई फ़ाइल के लिए कौन सा अक्षरसेट करता है? 'सामग्री-प्रकार: पाठ/सादा; charset = utf-8'? क्या यह आपकी स्थानीय देव मशीन और जेबॉस सर्वर पर समान है? फिडलर/नेटमोन या वायरशर्क शो क्या करता है? – Ben

1

मुझे स्वीकार करना होगा, इस नक्षत्र में मैंने charset=... नहीं देखा है। लेकिन चारसेट पाठ के लिए और अधिक समझ में आता है, इसलिए पहले की कोशिश:

dsRequestProperties.setContentType("text/csv; charset=UTF-8"); 

कारण, application जो अच्छी तरह से बाइनरी डेटा का संकेत हो सकता है, एक चारसेट बाइट एन्कोडिंग खतरनाक होगा।


जोड़ा गया: त्रुटि

के लिए मेरे स्पष्टीकरण हो सकता है कि स्ट्रिंग asExport UTF-8 मिल गया लेकिन दो अक्षर एक बहु बाइट चार के बजाय के लिए देता है। वे गैर-ASCII रेंज में भी हैं, और आपकी प्रतिक्रिया किसी भी तरह आईएसओ -885 9 -1 (डिफ़ॉल्ट लैटिन -1) वितरित करना चाहता है, और ?? लिखती है। 2 त्रुटियां हैं।

आप asExport का निरीक्षण कर सकते हैं। यूआरएफ -8 में क्यों लिखना charset = UTF-8 के बावजूद सफल नहीं होता है ...

+0

इसे बदल दिया और परिणाम वही है :( – Fofole

+0

आपने वैश्विक सेटिंग्स की हैं, लेकिन सर्वलेट में एन्कोडिंग के लिए एक init-param भी है; http://www.smartclient.com/smartgwtee/server/javadoc/index.html?com /isomorphic/servlet/IDACall.html। कल्पना नहीं कर सकता कि आप इसे नहीं देख पाएंगे। शायद 'exportAs' पहले से ही गलत है; मेरे उत्तर में जोड़ा गया –

1

आपके पास आपके जेबॉस सेटअप में कुछ अतिरिक्त फ़िल्टर सर्विसेज हैं जो एन्कोडिंग में हस्तक्षेप कर रहे हैं। संभवतः प्रमाणीकरण या संपीड़न से संबंधित है।