Java webapp में UTF-8 काम कैसे करें?


367

मुझे अपने äöåफ़िनिश पाठ और सिरिलिक वर्णमाला जैसे ЦжФविशेष मामलों के लिए समर्थन करने के लिए अपने जावा वेबएप (सर्वलेट्स + जेएसपी, कोई फ्रेमवर्क का उपयोग नहीं) में यूटीएफ -8 प्राप्त करने की आवश्यकता है ।

मेरा सेटअप निम्नलिखित है:

  • विकास का वातावरण: विंडोज़ एक्सपी
  • उत्पादन का माहौल: डेबियन

डेटाबेस का इस्तेमाल किया: MySQL 5.x

उपयोगकर्ता मुख्य रूप से Firefox2 का उपयोग करते हैं, लेकिन ओपेरा 9.x, FF3, IE7 और Google Chrome का उपयोग साइट तक पहुंचने के लिए किया जाता है।

इसे कैसे प्राप्त किया जाए?


यह भी देखें stackoverflow.com/questions/153527/...
Raedwald

जवाबों:


552

इस साइट के FAQ के रूप में खुद को जवाब देना इसे प्रोत्साहित करता है। यह मेरे लिए काम करता है:

ज्यादातर वर्ण äåö एक समस्याग्रस्त नहीं हैं क्योंकि वेब ब्राउज़र के लिए ब्राउज़र और टॉमकैट / जावा द्वारा उपयोग किए जाने वाले डिफ़ॉल्ट चरित्र लैटिन 1 है। ISO-8859-1 जो ​​उन पात्रों को "समझता" है।

Java + Tomcat + Linux / Windows + Mysql के तहत काम करने के लिए UTF-8 प्राप्त करने के लिए निम्नलिखित की आवश्यकता है:

टॉमकैट के server.xml को कॉन्फ़िगर करना

यह कॉन्फ़िगर करना आवश्यक है कि कनेक्टर url (GET अनुरोध) मापदंडों को एनकोड करने के लिए UTF-8 का उपयोग करता है:

<Connector port="8080" maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="20000" disableUploadTimeout="true" 
 compression="on" 
 compressionMinSize="128" 
 noCompressionUserAgents="gozilla, traviata" 
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
 URIEncoding="UTF-8"
/>

उपरोक्त उदाहरण में URIEncoding = "UTF-8" प्रमुख हिस्सा है । यह बताता है कि टॉमकैट आने वाले सभी GET मापदंडों को UTF-8 के रूप में इनकोड करता है। परिणामस्वरूप, जब उपयोगकर्ता ब्राउज़र के एड्रेस बार पर निम्नलिखित लिखता है:

 https://localhost:8443/ID/Users?action=search&name=*ж*

चरित्र ж को UTF-8 के रूप में संभाला जाता है और % D0% B6 के रूप में (आमतौर पर सर्वर तक पहुंचने से पहले ब्राउज़र द्वारा) को इनकोड किया जाता है ।

POST अनुरोध इससे प्रभावित नहीं हैं।

CharsetFilter

फिर यह जावा वेबएप को सभी अनुरोधों और प्रतिक्रियाओं को संभालने के लिए मजबूर करने का समय है क्योंकि यूटीएफ -8 इनकोडेड है। इसके लिए आवश्यक है कि हम निम्नलिखित की तरह एक कैरेक्टर सेट फिल्टर को परिभाषित करें:

package fi.foo.filters;

import javax.servlet.*;
import java.io.IOException;

public class CharsetFilter implements Filter {

    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
            throws IOException, ServletException {
        // Respect the client-specified character encoding
        // (see HTTP specification section 3.4.1)
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }

        // Set the default response content type and encoding
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }

    public void destroy() {
    }
}

यह फ़िल्टर सुनिश्चित करता है कि यदि ब्राउज़र ने अनुरोध में उपयोग किए गए एन्कोडिंग को सेट नहीं किया है, तो यह UTF-8 पर सेट है।

इस फ़िल्टर द्वारा की गई दूसरी चीज़ डिफ़ॉल्ट प्रतिक्रिया एन्कोडिंग को सेट करना है। एन्कोडिंग जिसमें html / जो कुछ भी है उसे लौटा दिया। विकल्प अनुप्रयोग के प्रत्येक नियंत्रक में प्रतिक्रिया एन्कोडिंग आदि को सेट करना है।

इस फ़िल्टर को web.xml या webapp के परिनियोजन वर्णक में जोड़ा जाना है :

 <!--CharsetFilter start--> 

  <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>fi.foo.filters.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>

  <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

इस फ़िल्टर को बनाने के निर्देश टॉमकैट विकी ( http://wiki.apache.org/tomcat/Tomcat/UTF-8 ) पर पाए जाते हैं

JSP पेज एन्कोडिंग

अपने web.xml में , निम्नलिखित जोड़ें:

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

वैकल्पिक रूप से, वेब के सभी JSP- पेजों को उनमें से शीर्ष पर निम्नलिखित की आवश्यकता होगी:

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

यदि विभिन्न JSP- अंशों के साथ किसी प्रकार का लेआउट उपयोग किया जाता है, तो यह उन सभी में आवश्यक है ।

HTML- मेटा टैग

JSP पेज एन्कोडिंग JVM को सही एन्कोडिंग में JSP पेज के पात्रों को संभालने के लिए कहता है। फिर यह उस ब्राउज़र को बताने का समय है जिसमें html पृष्ठ को एन्कोडिंग है:

यह वेब द्वारा निर्मित प्रत्येक एक्सएचटीएमएल पेज के शीर्ष पर निम्नलिखित के साथ किया जाता है:

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
   <head>
   <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
   ...

JDBC-कनेक्शन

डीबी का उपयोग करते समय, यह परिभाषित करना होगा कि कनेक्शन UTF-8 एन्कोडिंग का उपयोग करता है। यह संदर्भ में किया जाता है। xml या जहाँ भी JDBC कनेक्शन इस प्रकार से परिभाषित है:

      <Resource name="jdbc/AppDB" 
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="20" maxIdle="10" maxWait="10000"
        username="foo"
        password="bar"
        driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/      ID_development?useEncoding=true&amp;characterEncoding=UTF-8"
    />

MySQL डेटाबेस और टेबल

उपयोग किए गए डेटाबेस को UTF-8 एन्कोडिंग का उपयोग करना चाहिए। यह निम्नलिखित के साथ डेटाबेस बनाकर प्राप्त किया जाता है:

   CREATE DATABASE `ID_development` 
   /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */;

फिर, सभी तालिकाओं को UTF-8 में भी होना चाहिए:

   CREATE TABLE  `Users` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(30) collate utf8_swedish_ci default NULL
    PRIMARY KEY  (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC;

CHARSET = utf8 होने वाला प्रमुख भाग ।

MySQL सर्वर कॉन्फ़िगरेशन

MySQL serveri को भी कॉन्फ़िगर करना होगा। आमतौर पर यह विंडोज़ में my.ini -file और Linux में my.cnf -file को कॉन्फ़िगर करके किया जाता है । उन फ़ाइलों में यह परिभाषित किया जाना चाहिए कि सर्वर से जुड़े सभी क्लाइंट utf8 को डिफ़ॉल्ट वर्ण सेट के रूप में उपयोग करते हैं और सर्वर द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट charset भी utf8 है।

   [client]
   port=3306
   default-character-set=utf8

   [mysql]
   default-character-set=utf8

मैसकल प्रक्रिया और कार्य

इन्हें वर्ण सेट को परिभाषित करने की भी आवश्यकता है। उदाहरण के लिए:

   DELIMITER $$

   DROP FUNCTION IF EXISTS `pathToNode` $$
   CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8
   READS SQL DATA
   BEGIN

    DECLARE path VARCHAR(255) CHARACTER SET utf8;

   SET path = NULL;

   ...

   RETURN path;

   END $$

   DELIMITER ;

अनुरोध प्राप्त करें: लैटिन 1 और यूटीएफ -8

अगर और जब इसे टॉमकैट के server.xml में परिभाषित किया गया है कि GET अनुरोध पैरामीटर UTF-8 में एन्कोड किए गए हैं, तो निम्नलिखित GET अनुरोधों को ठीक से नियंत्रित किया जाता है:

   https://localhost:8443/ID/Users?action=search&name=Petteri
   https://localhost:8443/ID/Users?action=search&name=ж

क्योंकि ASCII- वर्ण लैटिन 1 और UTF-8 के साथ एक ही तरह से एन्कोड किए गए हैं, स्ट्रिंग "पेटीरी" को सही तरीके से संभाला गया है।

लैटिन 1 में सिरिलिक चरित्र ж को बिल्कुल भी नहीं समझा गया है। क्योंकि टॉमकैट को अनुरोध मापदंडों को संभालने के लिए निर्देश दिया जाता है क्योंकि UTF-8 के रूप में यह उस चरित्र को सही ढंग से % D0% B6 के रूप में एन्कोड करता है ।

यदि और जब ब्राउज़रों को UTF-8 एन्कोडिंग (अनुरोध हेडर और HTML मेटा-टैग के साथ) में पृष्ठों को पढ़ने का निर्देश दिया जाता है, तो इस अवधि से कम से कम फ़ायरफ़ॉक्स 2/3 और अन्य ब्राउज़र सभी वर्णों को स्वयं % D0% B6 के रूप में एन्कोड करते हैं ।

अंतिम परिणाम यह है कि "पेट्री" नाम के सभी उपयोगकर्ता पाए जाते हैं और "ж" नाम वाले सभी उपयोगकर्ता भी पाए जाते हैं।

लेकिन äåö के बारे में क्या?

HTTP- विनिर्देशन यह परिभाषित करता है कि डिफ़ॉल्ट URL द्वारा लैटिन 1 के रूप में एन्कोड किया गया है। यह फ़ायरफ़ॉक्स 2, फ़ायरफ़ॉक्स 3 आदि के परिणामस्वरूप निम्नलिखित एन्कोडिंग करता है

    https://localhost:8443/ID/Users?action=search&name=*Päivi*

एन्कोडेड संस्करण में

    https://localhost:8443/ID/Users?action=search&name=*P%E4ivi*

लैटिन 1 में चरित्र ä को % E4 के रूप में एन्कोड किया गया है । भले ही पृष्ठ / अनुरोध / सब कुछ UTF-8 का उपयोग करने के लिए परिभाषित किया गया हो । Ä का UTF-8 एन्कोडेड संस्करण % C3% A4 है

इसका नतीजा यह है कि वेब के लिए जीईटी अनुरोधों से अनुरोध पैरामीटर को आसानी से संभालना असंभव है क्योंकि कुछ वर्ण यूटीएफ -8 में लैटिन और अन्य में कूटबद्ध हैं। सूचना: POST अनुरोध ब्राउज़र के रूप में काम करते हैं, सभी अनुरोधों को पूरी तरह से UTF-8 में प्रपत्रों से कूटबद्ध करते हैं, यदि पृष्ठ को FF-8 के रूप में परिभाषित किया जाता है

पढ़ने की ललक

मेरी समस्या के उत्तर देने के लिए निम्नलिखित के लेखकों के लिए एक बहुत बड़ा धन्यवाद:

  • http://tagunov.tripod.com/i18n/i18n.html
  • http://wiki.apache.org/tomcat/Tomcat/UTF-8
  • http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/
  • http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html
  • http://jeppesn.dk/utf-8.html
  • http://www.nabble.com/request-parameters-mishandle-utf-8-encoding-td18720039.html
  • http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html
  • http://www.utf8-chartable.de/

महत्वपूर्ण लेख

3-बाइट UTF-8 वर्णों का उपयोग करके मूल बहुभाषी विमान का समर्थन करता है । यदि आपको इसके बाहर जाने की आवश्यकता है (कुछ अक्षर को UTF-8 के 3-बाइट से अधिक की आवश्यकता होती है), तो आपको या तो VARBINARYकॉलम प्रकार के स्वाद का उपयोग करना होगा या utf8mb4वर्ण सेट का उपयोग करना होगा (जिसके लिए MySQL 5.5.3 या बाद के संस्करण की आवश्यकता है)। बस इस बात का ध्यान रखें कि utf8MySQL में सेट किए गए वर्ण का उपयोग करना 100% समय तक काम नहीं करेगा।

अपाचे के साथ टॉम्केट

एक और बात यदि आप Apache + Tomcat + mod_JK कनेक्टर का उपयोग कर रहे हैं तो आपको निम्न बदलाव करने की आवश्यकता है:

  1. 8009 कनेक्टर के लिए tomcat server.xml फ़ाइल में URIEncoding = "UTF-8" जोड़ें, यह mod_JK कनेक्टर द्वारा उपयोग किया जाता है। <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
  2. अपने अपाचे फ़ोल्डर यानी गोटो /etc/httpd/confऔर जोड़ने AddDefaultCharset utf-8में httpd.conf fileनोट: पहले जांच लें कि यह मौजूद है या नहीं। यदि मौजूद है तो आप इसे इस लाइन के साथ अपडेट कर सकते हैं। आप इस पंक्ति को नीचे भी जोड़ सकते हैं।

ये चरण स्ट्रट्स / टाइल्स और पोस्टग्रेज डेटाबेस के साथ भी काम करते हैं।
16

17
दो टिप्पणियाँ: 1) HMTL- मेटा टैग में आप एक xml घोषणा शामिल थे। इसे निकालें, यह केवल quirks मोड में ब्राउज़र को ट्रिगर करेगा, आप ऐसा नहीं चाहते हैं। इसके अलावा, HTML मेटा टैग वास्तव में पहले से ही जेएसपी द्वारा किए गए हैं pageEncoding, इसलिए आप इसे छोड़ भी सकते हैं। 2) MySQL डेटाबेस और आपके द्वारा उपयोग की जाने वाली टेबल मेंutf8_swedish_si , यह होना चाहिए था utf8_unicode_ci। आप कोलाज को भी छोड़ सकते हैं, बस CHARACTER SET utf8पर्याप्त है।
BalusC

HTML मेटा टैग और क्विरक्स मोड (उदाहरण के लिए ericmeyeroncss.com/bonus/render-mode.html , en.wikipedia.org/wiki/Quirks_mode ) के संबंध में न तो मैंने जो दस्तावेज देखे हैं , उनसे पता चलता है कि <meta http-equiv = 'सामग्री की उपस्थिति -Type ’के रेंडरिंग मोड पर कोई प्रभाव पड़ता है।
Marcel Stör

एक दिलचस्प पक्ष के रूप में, आप यह भी जानना चाह सकते हैं कि यदि आपके पास एक श्रोता है जो अनुरोध पैरामीटर तक पहुंचता है, तो आपको एक श्रोता को जोड़ने की आवश्यकता होगी जो फ़िल्टर के बजाय चार्ट सेट करता है क्योंकि श्रोताओं को फ़िल्टर से पहले निष्पादित किया जाता है। मैंने सभी चरणों का पालन किया और यह अभी भी इस वजह से काम नहीं किया। बस मैंने सोचा कि मैं इस जानकारी के साथ गुजरता हूँ, अगर किसी और को भी इसी तरह की समस्या है।
15:123 पर परीक्षण123

3
Apache के साथ ## Tomcat ## एक और बात अगर आप Apache + Tomcat + mod_JK कनेक्टर का उपयोग कर रहे हैं तो आपको निम्न बदलाव करने की भी आवश्यकता है: 1. URIEncoding = "UTF-8" को tomatat server .xml फ़ाइल में 8009 कनेक्टर के लिए जोड़ें, यह mod_JK कनेक्टर द्वारा उपयोग किया जाता है। <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> 2. अपने अपाचे फ़ोल्डर को गोटो करें /etc/httpd/confऔर AddDefaultCharset utf-8'httpd.conf' फ़ाइल में जोड़ें । नोट: पहले जांच लें कि यह मौजूद है या नहीं। यदि मौजूद है तो आप इसे इस लाइन के साथ अपडेट कर सकते हैं। आप इस लाइन को नीचे भी जोड़ सकते हैं।
विजय शगोकर

14

मुझे लगता है कि आपने अपने उत्तर में इसे अच्छी तरह से अभिव्यक्त किया है।

UTF-8-ing (?) की प्रक्रिया में अंत से अंत तक आप यह भी सुनिश्चित कर सकते हैं कि जावा स्वयं UTF-8 का उपयोग कर रहा है। उपयोग -Dfile.encoding = utf-8 जेवीएम के लिए पैरामीटर के रूप में (इसे कैटालिना में कॉन्फ़िगर किया जा सकता है)।


इससे मुझे मदद मिली, मैंने सब कुछ उल्लेख किया लेकिन जेवीएम एन्कोडिंग विंडोज़ -1250 थी जैसे ही मैंने यूटीएफ -8 में बदल दिया यह त्रुटिपूर्ण काम कर गया।
कोडिंग_डॉट

2
आप कैटालिना.बैट फ़ाइल में उसे कहां जोड़ते हैं, कृपया?
नूह

11

किसमैंट के उत्तर में जोड़ने के लिए , यदि आप स्प्रिंग का उपयोग कर रहे हैं, तो अपने स्वयं के सर्वलेट फ़िल्टर लिखने के बजाय, आप अपने द्वारा org.springframework.web.filter.CharacterEncodingFilterप्रदान की जाने वाली कक्षा का उपयोग कर सकते हैं, इसे अपने web.xml में निम्नलिखित की तरह कॉन्फ़िगर कर सकते हैं :

 <filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</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>FALSE</param-value>
    </init-param>
 </filter>
 <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

1
यह फ़िल्टर web.xml
olyanren

2

मैं जोड़ने के लिए से भी चाहते हैं यहाँ इस हिस्से मेरी utf समस्या हल:

runtime.encoding=<encoding>

1

यह MySql तालिकाओं में ग्रीक एनकोडिंग के लिए है जब हम जावा का उपयोग करके उन्हें एक्सेस करना चाहते हैं:

अपने JBoss कनेक्शन पूल (mysql-ds.xml) में निम्नलिखित कनेक्शन सेटअप का उपयोग करें

<connection-url>jdbc:mysql://192.168.10.123:3308/mydatabase</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>nts</user-name>
<password>xaxaxa!</password>
<connection-property name="useUnicode">true</connection-property>
<connection-property name="characterEncoding">greek</connection-property>

यदि आप इसे JNDI कनेक्शन पूल में नहीं रखना चाहते हैं, तो आप इसे JDBC-url के रूप में कॉन्फ़िगर कर सकते हैं जैसे कि अगली पंक्ति दर्शाती है:

jdbc:mysql://192.168.10.123:3308/mydatabase?characterEncoding=greek

मेरे और निक के लिए, इसलिए हम इसे कभी नहीं भूलते हैं और समय बर्बाद नहीं करते हैं ....।


5
मैं अभी भी ग्रीक के ऊपर UTF-8 को प्राथमिकता दूंगा (और अपने वर्तमान यूनानी डेटा को UTF-8 में परिवर्तित करूंगा) ताकि आपका आवेदन वर्चस्व के लिए तैयार हो।
BalusC

1

अच्छा विस्तृत जवाब। बस एक और चीज़ जोड़ना चाहते थे जो निश्चित रूप से कार्रवाई में URL पर UTF-8 एन्कोडिंग को देखने में दूसरों की मदद करेगा।

फ़ायरफ़ॉक्स में URL पर UTF-8 एन्कोडिंग को सक्षम करने के लिए नीचे दिए गए चरणों का पालन करें।

  1. एड्रेस बार में "about: config" टाइप करें।

  2. "Network.standard-url.encode-query-utf8" संपत्ति की खोज करने के लिए फ़िल्टर इनपुट प्रकार का उपयोग करें।

  3. उपरोक्त संपत्ति डिफ़ॉल्ट रूप से गलत होगी, इसे TRUE में बदल दें।
  4. ब्राउज़र को पुनरारंभ करें।

URL पर UTF-8 एन्कोडिंग IE6 / 7/8 और क्रोम में डिफ़ॉल्ट रूप से काम करता है।


1

पिछली प्रतिक्रियाओं ने मेरी समस्या के साथ काम नहीं किया। यह केवल उत्पादन में था, जिसमें टॉमकैट और अपाचे mod_proxy_ajp थे। पोस्ट बॉडी ने नॉन एससीआई चरस खो दिया? समस्या अंत में JVM डिफाल्टरसेट (US-ASCII के साथ डिफ़ॉल्ट इंस्टेंलेशन में: Charset dfset = Charset.defaultCharset ();) के साथ थी, समाधान को चलाने के लिए tomcat सर्वर को एक मॉडिफायर के साथ JVM के साथ डिफ़ॉल्ट charset के रूप में चलाया गया था:

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" 

(इस लाइन को catalina.sh और सर्विस टॉमकैट रिस्टार्ट में जोड़ें)

हो सकता है कि आपको लिनक्स सिस्टम वेरिएबल (~ संपादित करें ~ / .ashashrc और ~ /। परमानेंट को भी स्थाई परिवर्तन के लिए देखना पड़े, https://perlgeek.de/en/article/set-up-a-clean-utf8-environment ) देखें

निर्यात LC_ALL = en_US.UTF-8
निर्यात LANG = en_US.UTF-8

निर्यात भाषा = en_US.UTF-8


0

मैं एक समान समस्या के साथ हूं, लेकिन, एक फाइल के फ़ाइलनाम में मैं अपाचे कॉमन्स के साथ कंप्रेस कर रहा हूं। इसलिए, मैंने इसे इस आदेश के साथ हल किया:

convmv --notest -f cp1252 -t utf8 * -r

यह मेरे लिए बहुत अच्छा काम करता है। आशा है कि यह किसी की मदद करेगा;)


0

संदेश बंडलों से यूनिकोड चरित्र प्रदर्शित करने के मेरे मामले के लिए, मुझे अपने जेएसपी पृष्ठ पर यूनिकोड प्रदर्शित करने के लिए "जेएसपी पेज एन्कोडिंग" अनुभाग लागू करने की आवश्यकता नहीं है। मुझे बस "चारसेटफिल्टर" अनुभाग की आवश्यकता है।


0

एक अन्य बिंदु जिसका उल्लेख नहीं किया गया है वह अजाक्स के साथ काम करने वाले जावा सर्वलेट्स से संबंधित है। मेरे पास ऐसी परिस्थितियाँ हैं जहाँ एक वेब पेज उपयोगकर्ता से utf-8 पाठ उठा रहा है जो इसे जावास्क्रिप्ट फ़ाइल में भेज रहा है जो इसे सर्वलेट में भेजे गए URI में शामिल करता है। सर्वलेट एक डेटाबेस पर सवाल उठाता है, परिणाम को कैप्चर करता है और इसे XML के रूप में जावास्क्रिप्ट फाइल पर वापस लौटाता है जो इसे प्रारूपित करता है और मूल वेब पेज में स्वरूपित प्रतिक्रिया सम्मिलित करता है।

एक वेब ऐप में मैं URI के निर्माण में जावास्क्रिप्ट को लपेटने के लिए एक अजाक्स पुस्तक के शुरुआती निर्देशों का पालन कर रहा था। पुस्तक में उदाहरण ने भागने () पद्धति का उपयोग किया, जिसे मैंने खोजा (कठिन तरीका) गलत है। Utf-8 के लिए आपको encodeURIComponent () का उपयोग करना होगा।

कुछ लोगों को इन दिनों अपने खुद के अजाक्स रोल करने के लिए लगता है, लेकिन मैंने सोचा कि मैं इसे भी जोड़ सकता हूं।


0

CharsetFilter@Kosoant उत्तर में उल्लिखित के बारे में ....

Filterटॉमकैट web.xml(पर स्थित conf/web.xml) में एक निर्माण होता है । फ़िल्टर नाम दिया गया है setCharacterEncodingFilterऔर डिफ़ॉल्ट रूप से टिप्पणी की गई है। आप इसे असहज कर सकते हैं (कृपया इसे filter-mappingभी याद रखें )

इसके अलावा jsp-configआपके में सेट करने की कोई आवश्यकता नहीं है web.xml(मैं इसे टॉमकैट 7+ के लिए परीक्षण कर रहा हूं)


0

कुछ समय बाद आप MySQL एडमिनिस्ट्रेटर विज़ार्ड के माध्यम से समस्या को हल कर सकते हैं। में

स्टार्टअप चर> उन्नत>

और Def सेट करें। चार सेट: utf8

हो सकता है कि इस कॉन्फ़िगरेशन को MySQL को पुनरारंभ करने की आवश्यकता हो।


0

स्प्रिंग एमवीसी 5 + टॉम्कट 9 + जेएसपी पर एक ही मुद्दा का सामना करना पड़ा।
लंबे शोध के बाद, एक सुरुचिपूर्ण समाधान आया ( कोई ज़रूरत नहीं फ़िल्टर और टॉमकैट सर्वर में कोई बदलाव की आवश्यकता नहीं है। xml (8.0.0-RC3 संस्करण से शुरू))

  1. WebMvcConfigurer के कार्यान्वयन में संदेश स्रोत (UTF-8 एन्कोडिंग में संदेश स्रोत फ़ाइलों से डेटा पढ़ने के लिए) के लिए डिफ़ॉल्ट एन्कोडिंग सेट है।

    @Configuration
    @EnableWebMvc
    @ComponentScan("{package.with.components}")
    public class WebApplicationContextConfig implements WebMvcConfigurer {
    
        @Bean
        public MessageSource messageSource() {
            final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    
            messageSource.setBasenames("messages");
            messageSource.setDefaultEncoding("UTF-8");
    
            return messageSource;
        }
    
        /* other beans and methods */
    
    }
  2. DispatcherServletInitializer कार्यान्वयन में @ ऑनस्टार्ट विधि को लागू करें और इसमें अनुरोध और संसाधन वर्ण एन्कोडिंग सेट करें।

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        public void onStartup(final ServletContext servletContext) throws ServletException {
    
            // https://wiki.apache.org/tomcat/FAQ/CharacterEncoding
            servletContext.setRequestCharacterEncoding("UTF-8");
            servletContext.setResponseCharacterEncoding("UTF-8");
    
            super.onStartup(servletContext);
        }
    
        /* servlet mappings, root and web application configs, other methods */
    
    }
  3. सभी संदेश स्रोत सहेजें और UTF-8 एन्कोडिंग में फ़ाइलें देखें।

  4. <% @ पृष्ठ contentType = "text / html; charset = UTF-8"%> या <% @ पृष्ठ पृष्ठ जोड़ें = "UTF-8"%> प्रत्येक * .jsp फ़ाइल में जोड़ें या web.xml में jsp- configptptor जोड़ें।

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     id="WebApp_ID" version="3.0">
        <display-name>AppName</display-name>
    
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <page-encoding>UTF-8</page-encoding>
            </jsp-property-group>
        </jsp-config>
    </web-app>

-1

यदि आपने कनेक्शन पूल (mysql-ds.xml) में निर्दिष्ट किया है, तो अपने जावा कोड में आप कनेक्शन को इस प्रकार खोल सकते हैं:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://192.168.1.12:3308/mydb?characterEncoding=greek",
    "Myuser", "mypass");
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.