आपको वास्तव में हर चीज़ UTF-8 को बिंदु से बिंदु तक बनाने का प्रयास करना चाहिए।
डेटाबेस और तालिका के लिए उपयुक्त यूनिकोड जागरूक संयोजन का उपयोग करें, मैं हमेशा प्रति तालिका देता हूं, भले ही डीबी डिफ़ॉल्ट पहले से ही दिया गया हो। इस उत्तर में बहुत सारे mysql+java और सर्वलेट मुद्दे भी हैं लेकिन यूनिकोड जागरूक जावा अनुप्रयोगों को विकसित करते समय हमें उन अधिकांश मुद्दों का उत्तर देना चाहिए जिन्हें हमें जानना आवश्यक है।
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_swedish_ci;
CREATE TABLE tMyTable (
id int(11) NOT NULL auto_increment,
code VARCHAR(20) NOT NULL,
name VARCHAR(20) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_swedish_ci;
यूनिकोड अनुवाद के लिए jdbc कनेक्शन स्ट्रिंग का उपयोग करें।
<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
maxActive="10" maxIdle="2" maxWait="10000"
username="myuid" password="mypwd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8"
validationQuery="SELECT 1"
/>
टॉमकैट को GET और POST दोनों पैरामीटर स्ट्रिंग्स के लिए सामग्री-प्रकार वर्णसेट का उपयोग करने के लिए बाध्य करें, इसलिए http और https कनेक्टर (tomcat/conf/server.xml फ़ाइल) के लिए useBodyEncodingForURI विशेषता लागू करें।
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
useBodyEncodingForURI="true"
/>
प्रत्येक सर्वलेट पृष्ठ की शुरुआत में सुनिश्चित करें कि टॉमकैट पार्सर्स यूटीएफ -8 के रूप में पैरामीटर का अनुरोध करते हैं। पैरामीटर पढ़ने से पहले आपको setCharacterEncoding को कॉल करना होगा या बहुत देर हो चुकी है। अधिकांश वेब ब्राउज़र सामग्री-प्रकार वर्णसेट विशेषता नहीं भेजते हैं, इसलिए सर्वलेट इंजन गलत अनुमान लगा सकते हैं।
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException { doPost(req, res); }
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
if (req.getCharacterEncoding() == null)
req.setCharacterEncoding("UTF-8");
String value = request.getParameter("fieldName");
...
}
.jsp पेज से सावधान रहें, एक खाली लीडिंग व्हाइटचर्स न डालें या कॉल करने में बहुत देर हो सकती है setCharacterEncoding, देखें कि मैं किसी भी व्हाइटचर्स से बचने के लिए प्रत्येक पंक्ति के अंत में टैग मार्कर कैसे लगाता हूं, यह भी कि html एलिमेंट्स पहली लाइन से कैसे शुरू होते हैं। जेएसपी टैग contentType
http प्रतिक्रिया पर जाता है और pageEncoding
इसका मतलब है कि डिस्क में फाइल को कैसे स्टोर किया जाता है। यदि आपके पास केवल ISO-8859-15 टेक्स्ट एडिटर है और आप jsp पेज में i18n अक्षरों को हार्डकोड नहीं करते हैं तो आप उचित iso* पेजएन्कोडिंग चुन सकते हैं।
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@
taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %><%@
page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
import="java.util.*,
java.io.*
"
%><%
if (req.getCharacterEncoding() == null)
request.setCharacterEncoding("UTF-8");
String param1 = request.getParameter("fieldName");
%><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Page Title</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="keywords" content="some,fine,keywords" />
</head>
<body>
your html content goes here.... <%= param1 %>
</body>
</html>
जेएसपी पेज में एक्सएमएल दस्तावेज़ बनाना आपको व्हाइटचर्स या न्यूलाइन के बिना एक्सएमएल हेडर लिखना होगा। देखें कि कैसे स्क्रिप्टलेट एंडटैग और एक्सएमएल हेडर एक ही पंक्ति में हैं। एम्बेडेड जेएसपी कोड को हमेशा ध्यान में रखना चाहिए, निर्दोष अग्रणी व्हाइटचर अच्छी तरह से स्वरूपित उत्तरों को बर्बाद कर सकता है।
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@
page contentType="text/xml; charset=UTF-8" pageEncoding="ISO-8859-1"
import="java.util.*,
java.io.*
"
%><%
// MyBean has getId() and getName() getters
List<MyBean> items = new ArrayList<MyBean>();
items.add( new MyBean(1, "first") );
items.add( new MyBean(2, "second") );
items.add( new MyBean(3, "third") );
pageContext.setAttribute("items", items);
%><?xml version="1.0" encoding="UTF-8"?>
<mydoc>
<c:forEach var="item" items="${items}">
<item>
<id>${item.id}</id>
<name>${item.name}</name>
</item>
</c:forEach>
</mydoc>