জাভা ওয়েব অ্যাপসে কীভাবে ইউটিএফ -8 পাবেন?


367

äöåনিয়মিত ফিনিশ পাঠ্য এবং ЦжФবিশেষ ক্ষেত্রে যেমন সিরিলিক বর্ণমালা ইত্যাদির জন্য সমর্থন করতে আমার জাভা ওয়েব অ্যাপে (সার্লেটগুলি + জেএসপি, কোনও কাঠামো ব্যবহার করা হয়নি) আমার ইউটিএফ -8 পাওয়া দরকার ।

আমার সেটআপটি নিম্নলিখিত:

  • বিকাশের পরিবেশ: উইন্ডোজ এক্সপি
  • উত্পাদনের পরিবেশ: দেবিয়ান

ব্যবহৃত ডেটাবেস: মাইএসকিউএল 5.x

ব্যবহারকারীরা প্রধানত ফায়ারফক্স 2 ব্যবহার করে তবে অপেরা 9.x, এফএফ 3, আই 7 এবং গুগল ক্রোম সাইট অ্যাক্সেস করতে ব্যবহৃত হয়।

কীভাবে এটি অর্জন করবেন?


উত্তর:


552

নিজেকে এই সাইটের FAQ হিসাবে উত্তর দেওয়া এটি উত্সাহিত করে। এটি আমার পক্ষে কাজ করে:

মূলত অক্ষরগুলি সমস্যাযুক্ত নয় কারণ ব্রাউজারগুলি দ্বারা ব্যবহৃত ডিফল্ট অক্ষর সেট এবং ওয়েব অ্যাপসের জন্য টমক্যাট / জাভা ল্যাটিন 1 ie আইএসও -8859-1 যা এই অক্ষরগুলিকে "বোঝে"।

জাভা + টমক্যাট + লিনাক্স / উইন্ডোজ + মাইকিউএল এর অধীনে ইউটিএফ -8 কাজ করার জন্য নিম্নলিখিতগুলির প্রয়োজন:

টমকেটের সার্ভার.এক্সএমএল কনফিগার করছে

এটি কনফিগার করা প্রয়োজন যে সংযোগকারী ইউআরএলএফ -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"
/>

উপরের উদাহরণে মূল অংশটি ইউআরআইএনকোডিং = "ইউটিএফ -8" । টমক্যাটটি আগত সমস্ত জিইটি প্যারামিটারগুলি ইউটিএফ -8 এনকোডড হিসাবে পরিচালনা করে এমন পরিমাণে tees ফলস্বরূপ, ব্যবহারকারী যখন ব্রাউজারের ঠিকানা বারে নিম্নলিখিতটি লিখে থাকেন:

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

অক্ষরটি ইউটিএফ -8 হিসাবে পরিচালিত হয় এবং এটি % D0% B6 হিসাবে সাধারণত সার্ভারে যাওয়ার আগে সাধারণত ব্রাউজার দ্বারা এনকোড করা হয় ।

পোস্ট অনুরোধ এটি দ্বারা প্রভাবিত হয় না।

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() {
    }
}

এই ফিল্টারটি নিশ্চিত করে যে ব্রাউজার যদি অনুরোধে ব্যবহৃত এনকোডিং সেট না করে তবে এটি ইউটিএফ -8 এ সেট করা আছে।

এই ফিল্টারটি দ্বারা করা অন্য কাজটি হ'ল ডিফল্ট প্রতিক্রিয়া এনকোডিং সেট করা। যে এনকোডিংটিতে ফিরে আসা এইচটিএমএল / যা কিছু হোক। বিকল্পটি হ'ল অ্যাপ্লিকেশনটির প্রতিটি নিয়ামকটিতে প্রতিক্রিয়া এনকোডিং ইত্যাদি সেট করা।

এই ফিল্টারটি ওয়েব.এক্সএমএল বা ওয়েবঅ্যাপের স্থাপনার বিবরণীতে যুক্ত করতে হবে :

 <!--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-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

বিকল্পভাবে, ওয়েবঅ্যাপের সমস্ত জেএসপি-পৃষ্ঠাগুলির নীচের অংশে নীচে থাকা দরকার:

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

বিভিন্ন জেএসপি-টুকরোগুলি সহ যদি কোনও ধরণের লেআউট ব্যবহার করা হয়, তবে তাদের সকলের ক্ষেত্রে এটি প্রয়োজন ।

এইচটিএমএল-মেটা ট্যাগ

জেএসপি পৃষ্ঠা এনকোডিংটি জেভিএমকে সঠিক এনকোডিংয়ে জেএসপি পৃষ্ঠায় অক্ষরগুলি পরিচালনা করতে বলে। তারপরে এটি এইচটিএমএল পৃষ্ঠাটি এনকোডিংয়ের মধ্যে ব্রাউজারটি বলার সময় হয়েছে:

ওয়েব অ্যাপ দ্বারা উত্পাদিত প্রতিটি এক্সএইচটিএমএল পৃষ্ঠার শীর্ষে নিম্নলিখিতটি দিয়ে এটি করা হয়:

   <?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 এর-সংযোগ

কোনও ডিবি ব্যবহার করার সময়, এটি সংজ্ঞায়িত করতে হবে যে সংযোগটি ইউটিএফ -8 এনকোডিং ব্যবহার করে। এই মধ্যে সম্পন্ন করা হয় context.xml বা নিম্নরূপ যেখানেই থাকুন না কেন JDBC সংযোগ defiend হল:

      <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"
    />

মাইএসকিউএল ডাটাবেস এবং টেবিল

ব্যবহৃত ডাটাবেসের অবশ্যই ইউটিএফ -8 এনকোডিং ব্যবহার করতে হবে। নিম্নলিখিতগুলির সাথে ডাটাবেস তৈরি করে এটি অর্জন করা হয়েছে:

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

তারপরে, সমস্ত সারণী ইউটিএফ -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

মাইএসকিউএল সার্ভার কনফিগারেশন

মাইএসকিউএল সার্ভারিও কনফিগার করতে হবে। সাধারণত উইন্ডোতে my.ini -file এবং লিনাক্সে my.cnf- file কনফিগার করে এটি করা হয় । এই ফাইলগুলিতে এটি সংজ্ঞায়িত করা উচিত যে সার্ভারের সাথে সংযুক্ত সমস্ত ক্লায়েন্টগুলি utf8 কে ডিফল্ট অক্ষর সেট হিসাবে ব্যবহার করে এবং সার্ভারের ব্যবহৃত ডিফল্ট চরসেটটিও utf8।

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

   [mysql]
   default-character-set=utf8

MySQL প্রক্রিয়া এবং ফাংশন

এগুলির জন্য অক্ষর সেট সংজ্ঞায়িত হওয়াও দরকার। উদাহরণ স্বরূপ:

   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

যদি এবং কখন এটি টমকাটের সার্ভার.এক্সএমএল এ সংজ্ঞায়িত করা হয় যে জিইটি অনুরোধ পরামিতিগুলি ইউটিএফ -8 এ এনকোড করা আছে, নিম্নলিখিত জিইটি অনুরোধগুলি সঠিকভাবে পরিচালনা করা হয়:

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

যেহেতু এএসসিআইআই-অক্ষরগুলি ল্যাটিন 1 এবং ইউটিএফ -8 উভয়ের সাথে একইভাবে এনকোড করা হয়েছে, "পেটারি" স্ট্রিংটি সঠিকভাবে পরিচালনা করা হয়েছে।

সিরিলিক চরিত্রটি ল্যাটিন 1 এ মোটেই বোঝা যায় না। টমক্যাটকে অনুরোধের পরামিতিগুলি ইউটিএফ -8 হ্যান্ডেল করার জন্য নির্দেশ দেওয়া হয়েছে কারণ এটি % D0% B6 হিসাবে সঠিকভাবে অক্ষরটিকে এনকোড করে ।

যদি এবং যখন ব্রাউজারগুলিকে ইউটিএফ -8 এনকোডিংয়ের (অনুরোধ শিরোনাম এবং এইচটিএমএল মেটা ট্যাগ সহ) পৃষ্ঠাগুলি পড়ার নির্দেশ দেওয়া হয়, তবে কমপক্ষে ফায়ারফক্স 2/3 এবং অন্যান্য ব্রাউজারগুলি এই সময়কালে সমস্ত চরিত্রকে % D0% B6 হিসাবে এনকোড করে ।

শেষ পরিণতিটি হ'ল "পেটারি" নামধারী সমস্ত ব্যবহারকারী এবং "ж" নামধারী সমস্ত ব্যবহারকারী পাওয়া গেছে।

তবে কি সম্পর্কে?

এইচটিটিপি-নির্দিষ্টকরণটি সংজ্ঞায়িত করে যে ডিফল্ট ইউআরএলগুলি লাতিন 1 হিসাবে এনকোড করা আছে। এর ফলে ফায়ারফক্স 2, ফায়ারফক্স 3 ইত্যাদি নিম্নলিখিত এনকোডিংয়ের ফলাফল

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

এনকোড সংস্করণে

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

Latin1 চরিত্র সালে একটি হিসাবে এনকোডেড হয়েছে % E4যদিও পৃষ্ঠা / অনুরোধ / সবকিছু ইউটিএফ -8 ব্যবহারের জন্য সংজ্ঞায়িত করা হয়েছে । T এর ইউটিএফ -8 এনকোড সংস্করণটি % সি 3% এ 4

এর ফলাফলটি হ'ল ওয়েব অ্যাপের পক্ষে জিইটি অনুরোধ থেকে অনুরোধের পরামিতিগুলি সঠিকভাবে পরিচালনা করা বেশ কয়েকটি অক্ষরকে লাতিন 1 এবং ইউটিএফ -8 এ অন্যদের এনকোড করা হওয়ায় এটি সঠিকভাবে অসম্ভব। বিজ্ঞপ্তি: পোস্টটি ইউটিএফ -8 হিসাবে সংজ্ঞায়িত করা হয় যদি ব্রাউজারগুলি ইউটিএফ -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 অক্ষর ব্যবহার করে বেসিক বহুভাষিক প্লেন সমর্থন করে । যদি আপনাকে এর বাইরে যেতে হয় (নির্দিষ্ট বর্ণমালাগুলির জন্য ইউটিএফ -8-এর 3-বাইটের বেশি প্রয়োজন হয়), তবে আপনাকে হয় VARBINARYকলামের ধরণের স্বাদ ব্যবহার করতে হবে বা utf8mb4অক্ষর সেটটি ব্যবহার করতে হবে (যার জন্য মাইএসকিউএল 5.5.3 বা তার পরে প্রয়োজন)। শুধু সচেতন থাকুন যে utf8মাইএসকিউএলে বর্ণচিহ্নটি ব্যবহার করা সময়ের সাথে 100% কাজ করবে না।

অ্যাপাচে টমকেট

আরও একটি জিনিস আপনি যদি অ্যাপাচি + টমক্যাট + মোড_জে কে সংযোগকারী ব্যবহার করে থাকেন তবে আপনার নিম্নলিখিত পরিবর্তনগুলিও করতে হবে:

  1. 8009 সংযোজকের জন্য টমক্যাট সার্ভার.এক্সএমএল ফাইলে ইউআরআইএনকোডিং = "ইউটিএফ -8" যুক্ত করুন, এটি মোড_জেকে সংযোজক দ্বারা ব্যবহৃত হয়। <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
  2. আপনার Apache ফোল্ডারের অর্থাত এতে যান /etc/httpd/confএবং অ্যাড AddDefaultCharset utf-8মধ্যে httpd.conf fileদ্রষ্টব্য: প্রথমে এটি উপস্থিত আছে কি নেই তা পরীক্ষা করুন। উপস্থিত থাকলে আপনি এই লাইনটি দিয়ে আপডেট করতে পারেন। আপনি নীচে এই লাইনটি যুক্ত করতে পারেন।

এই পদক্ষেপগুলি স্ট্রুটস / টাইলস এবং একটি পোস্টগ্রিজ ডাটাবেসের সাথেও কাজ করে।
kosoant

17
দুটি মন্তব্য: 1) এইচএমটিএল-মেটা ট্যাগগুলিতে আপনি একটি এক্সএমএল ঘোষণা অন্তর্ভুক্ত করেছেন। এটি সরান, এটি কেবল কুইর্কস মোডে ব্রাউজারগুলি ট্রিগার করবে, আপনি এটি চান না। এছাড়াও, এইচটিএমএল মেটা ট্যাগগুলি ইতিমধ্যে জেএসপি দ্বারা স্পষ্টভাবে সম্পন্ন হয়েছে pageEncoding, তাই আপনি এটিকে এড়িয়ে যেতে পারেন। 2) মাইএসকিউএল ডাটাবেস এবং আপনি যে টেবিলগুলি ব্যবহার করেছেন তাতে utf8_swedish_siএটি হওয়া উচিত ছিল utf8_unicode_ci। আপনি এমনকি কোলেশন ছেড়ে চলে যেতে পারেন, কেবল CHARACTER SET utf8যথেষ্ট।
বালাসসি

আমরাও নথি আমি সংক্রান্ত আলোচনা এইচটিএমএল মেটা ট্যাগ এবং quirks মোড (যেমন ericmeyeroncss.com/bonus/render-mode.html , en.wikipedia.org/wiki/Quirks_mode ) নির্দেশ করে যে <মেটা HTTP-equiv = 'বিষয়বস্তু উপস্থিতিতে টাইপ 'রেন্ডারিং মোডে কোন প্রভাব আছে।
মার্সেল Stör

একটি আকর্ষণীয় পার্শ্ব নোট হিসাবে আপনি সচেতন হতে চাইতে পারেন যে আপনার যদি এমন শ্রোতা থাকে যা একটি অনুরোধ প্যারামিটারটি অ্যাক্সেস করে তবে আপনার একটি শ্রোতা যুক্ত করতে হবে যা ফিল্টারের পরিবর্তে চরসেট সেট করে কারণ শ্রোতারা ফিল্টারগুলির আগে নির্বাহ করা হয়। আমি সমস্ত পদক্ষেপগুলি অনুসরণ করেছি এবং এটি এর কারণে এখনও কার্যকর হয়নি। কেবল ভেবেছিলাম আমি এই তথ্যটি দিয়ে যাব, অন্য কারও ক্ষেত্রেও যদি একই সমস্যা হয়।
টেস্টিং 123

3
## অ্যাপাচি সহ টমক্যাট ## আরও একটি জিনিস আপনি যদি অ্যাপাচি + টমক্যাট + মোড_জেকে সংযোগকারী ব্যবহার করে থাকেন তবে আপনার নিম্নলিখিত পরিবর্তনগুলিও করতে হবে: 1. ইউআরআইএনকোডিং = "ইউটিএফ -8" 800 টেমক্যাট সার্ভার.এক্সএমএল ফাইলটিতে 8009 সংযোজকের জন্য যুক্ত করুন, এটি Mod_JK সংযোজক দ্বারা ব্যবহৃত হয়। <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> ২. আপনার অ্যাপাচি ফোল্ডারটি যান /etc/httpd/confএবং AddDefaultCharset utf-8'httpd.conf' ফাইলটি যুক্ত করুন। দ্রষ্টব্য: প্রথমে এটি উপস্থিত আছে কি নেই তা পরীক্ষা করুন। উপস্থিত থাকলে আপনি এই লাইনটি দিয়ে আপডেট করতে পারেন। আপনি নীচে এই লাইনটি যুক্ত করতে পারেন।
বিজয় শেগোকার

14

আমি মনে করি আপনি নিজের উত্তরে এটির সংক্ষিপ্ত বিবরণ দিয়েছেন।

ইউটিএফ -8-ইনিংয়ের প্রক্রিয়াতে (?) প্রান্ত থেকে শেষ পর্যন্ত আপনি নিজেও নিশ্চিত হতে পারেন যে জাভা নিজেই ইউটিএফ -8 ব্যবহার করছে। JVM- এর প্যারামিটার হিসাবে -Dfile.encoding = utf-8 ব্যবহার করুন (catalina.bat এ কনফিগার করা যেতে পারে)।


এটি আমাকে সহায়তা করেছিল, আমি উল্লিখিত সমস্ত কিছু করেছি তবে জেভিএম এনকোডিংটি উইন্ডোজ -১২৫০ হওয়ার সাথে সাথে আমি ইউটিএফ -8 এ পরিবর্তন করে নির্দোষভাবে কাজ করেছি।
কোডিং_আইডিয়ট

2
ক্যাটালিনা.বাট ফাইলটিতে আপনি এটি কোথায় যুক্ত করবেন দয়া করে?
নোহ

11

কোসোয়ান্টের উত্তরে যুক্ত করতে , আপনি যদি নিজের সার্ভলেট ফিল্টার লেখার পরিবর্তে স্প্রিং ব্যবহার করছেন তবে আপনি যে ক্লাসটি সরবরাহ করছেন org.springframework.web.filter.CharacterEncodingFilterসেগুলি আপনার ওয়েব.এক্সএমএল-এ নিম্নলিখিতগুলির মতো কনফিগার করে ব্যবহার করতে পারেন :

 <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
এই ফিল্টারটি অবশ্যই ওয়েব.এক্সএমএল
ফিলিপিন্সের

2

আমি এখান থেকে আরও যোগ করতে চাই এই অংশটি আমার সম্পূর্ণ সমস্যাটি সমাধান করেছে:

runtime.encoding=<encoding>

1

এটি যখন জাভা ব্যবহার করে অ্যাক্সেস করতে চান তখন এটি মাইএসকিএল টেবিলগুলিতে গ্রীক এনকোডিংয়ের জন্য:

আপনার 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>

আপনি যদি এটি কোনও জেএনডিআই সংযোগ পুলে রাখতে না চান, আপনি পরবর্তী লাইনের মতো এটি একটি জেডিবিসি-ইউআরএল হিসাবে কনফিগার করতে পারেন:

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

আমার এবং নিকের জন্য, তাই আমরা এটিকে কখনই ভুলি না এবং আর সময় নষ্ট করি না .....


5
আমি এখনও গ্রীক (ইউটিএফ -8 এ আপনার বর্তমান গ্রীক ডেটা রূপান্তর করতে) এর চেয়ে উপরে ইউটিএফ -8 পছন্দ করবো যাতে আপনার অ্যাপ্লিকেশন বিশ্ব আধিপত্যের জন্য প্রস্তুত থাকে।
বালুস সি

1

সুন্দর বিস্তারিত উত্তর। কেবল আরও একটি জিনিস যুক্ত করতে চেয়েছিলেন যা ইউআরএলগুলিতে ইউটিএফ -8 এনকোডিংটি কার্যকরভাবে দেখতে অন্যকে অবশ্যই সহায়তা করবে।

ফায়ারফক্সে ইউআরএলটিতে ইউটিএফ -8 এনকোডিং সক্ষম করতে নীচের পদক্ষেপগুলি অনুসরণ করুন।

  1. ঠিকানা বারে "সম্পর্কে: কনফিগারেশন" টাইপ করুন।

  2. "নেটওয়ার্ক.স্ট্যান্ডার্ড-url.encode-query-utf8" সম্পত্তি অনুসন্ধান করতে ফিল্টার ইনপুট টাইপ ব্যবহার করুন।

  3. উপরের সম্পত্তিটি ডিফল্ট হিসাবে মিথ্যা হবে, এটিকে সত্যে পরিণত করুন।
  4. ব্রাউজারটি পুনরায় চালু করুন।

ইউআরএলটিতে ইউটিএফ -8 এনকোডিং আইআই 6/7/8 এবং ক্রোমে ডিফল্টরূপে কাজ করে।


1

পূর্ববর্তী প্রতিক্রিয়াগুলি আমার সমস্যার সাথে কাজ করে না। এটি কেবলমাত্র উত্পাদনে ছিল, টমক্যাট এবং অ্যাপাচি Mod_proxy_ajp সহ। পোস্ট শরীরে নন অ্যাস্কি চর হারিয়েছে? শেষ পর্যন্ত সমস্যাটি ছিল জেভিএম ডিফল্টচরसेट (ইউএস-এএসসিআইআই একটি ডিফল্ট ইনস্টলশনে: চরসেট ডিএফসেট = চরসেট.ডেফল্টচ্যারসেট ();) সুতরাং, সমাধানটি টমক্যাট সার্ভারটি একটি সংশোধক দিয়ে ইউটিএফ -8 দিয়ে ডিফল্ট চরসেট হিসাবে চালানোর জন্য চালিত হয়েছিল:

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

(catalina.sh এবং পরিষেবা টমক্যাট পুনঃসূচনাতে এই লাইনটি যুক্ত করুন)

হতে পারে আপনাকে অবশ্যই লিনাক্স সিস্টেম ভেরিয়েবল পরিবর্তন করতে হবে (স্থায়ী পরিবর্তনের জন্য edit / .bashrc এবং ~ /। প্রোফাইলে সম্পাদনা করুন, https://perlgeek.de/en/article/set-up-a-clean-utf8- পরিবেশ দেখুন )

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 টেক্সট তুলছে যা এতে সার্ভলেটে প্রেরিত ইউআরআইতে অন্তর্ভুক্ত রয়েছে। সার্লেটটি একটি ডাটাবেসকে জিজ্ঞাসা করে, ফলাফলটি ক্যাপচার করে এবং এটিকে XML হিসাবে জাভাস্ক্রিপ্ট ফাইলে ফেরত দেয় যা এটির ফর্ম্যাট করে এবং মূল ওয়েব পৃষ্ঠায় ফর্ম্যাট করা প্রতিক্রিয়া সন্নিবেশ করে।

একটি ওয়েব অ্যাপে আমি ইউআরআই তৈরির জন্য জাভাস্ক্রিপ্ট মোড়ানোর জন্য প্রথম দিকের অ্যাজাক্স বইয়ের নির্দেশনা অনুসরণ করছিলাম। বইয়ের উদাহরণে পালানো () পদ্ধতিটি ব্যবহার করা হয়েছে, যা আমি আবিষ্কার করেছি (শক্ত উপায়) ভুল। Utf-8 এর জন্য আপনাকে অবশ্যই এনকোডিউআরআইআরকিউম্পোন্ট () ব্যবহার করতে হবে।

আজকাল খুব কম লোকই নিজের অ্যাজাক্স রোল করছে বলে মনে হয়েছে, তবে আমি ভেবেছিলাম আমিও এটি যুক্ত করতে পারি।


0

CharsetFilter@ কোসান্ট উত্তরে উল্লিখিত সম্পর্কে ....

Filterটমক্যাটে একটি বিল্ড ইন রয়েছে web.xml(অবস্থিত conf/web.xml)। ফিল্টারটির নাম দেওয়া হয়েছে setCharacterEncodingFilterএবং এটি ডিফল্টরূপে মন্তব্য করা হয়েছে। আপনি এটিকে অসুবিধে করতে পারেন (দয়া করে এটিরও অসুবিধা মনে রাখবেন filter-mapping)

এছাড়াও jsp-configআপনার সেট করার দরকার নেই web.xml(টমক্যাট 7+ এর জন্য এটি পরীক্ষা করেছি)


0

কিছু সময় আপনি মাইএসকিউএল প্রশাসক উইজার্ডের মাধ্যমে সমস্যার সমাধান করতে পারেন। ভিতরে

প্রারম্ভিক চলক> উন্নত>

এবং Def সেট করুন। চর সেট: utf8

হয়তো এই কনফিগারেশনের জন্য মাইএসকিউএল পুনরায় চালু করা দরকার।


0

স্প্রিং এমভিসি 5 + টমক্যাট 9 + জেএসপিতে একই সমস্যার মুখোমুখি।
দীর্ঘ গবেষণা পরে, একটি মার্জিত সমাধান (কাছে এসে কোন প্রয়োজন ফিল্টার এবং কোন প্রয়োজন পরিবর্তন হুল বিড়াল মধ্যে server.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. ডিসপ্যাচারসারভাইলেটআইনিটিয়ালাইজার বাস্তবায়নে @ অন স্টার্টআপ পদ্ধতিটি ওভাররাইড করুন এবং এতে অনুরোধ এবং সংস্থানীয় চরিত্রের এনকোডিং সেট করুন।

    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. সমস্ত বার্তা উত্স সংরক্ষণ করুন এবং ইউটিএফ -8 এনকোডিংয়ে ফাইলগুলি দেখুন।

  4. প্রতিটি * .jsp ফাইলে <% @ পৃষ্ঠার বিষয়বস্তু টাইপ = "পাঠ্য / এইচটিএমএল; চরসেট = ইউটিএফ -8"%> বা <% @ পৃষ্ঠার পৃষ্ঠা এনকোডিং = "ইউটিএফ -8"%> যুক্ত করুন বা ওয়েব.এক্সএমএলতে জেএসপি-কনফিগারেশন বর্ণনাকারী যুক্ত করুন

    <?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");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.