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