Наистина трябва да опитате да направите всичко UTF-8 от точка до точка.
Използвайте подходящо съпоставяне с информация за Unicode за база данни и таблица, аз винаги давам за таблица, дори ако вече е дадено db default. Този отговор има много проблеми с mysql+java, а също и със сървлети, но те трябва да отговорят на повечето проблеми, които трябва да знаем, когато разработваме 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, за да имате превод на Unicode.
<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"
/>
Принудете Tomcat да използва набор от знаци от тип съдържание както за GET, така и за POST низове от параметри, така че приложете атрибут useBodyEncodingForURI за http и https конектори (tomcat/conf/server.xml файл).
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true"
useBodyEncodingForURI="true"
/>
В началото на всяка страница със сървлет се уверете, че парсерите на Tomcat изискват параметри като utf-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 елементите започват от първия ред. Jsp маркер contentType
отива към http отговор и pageEncoding
означава как файлът се съхранява на диск. Ако имате само текстов редактор ISO-8859-15 и не кодирате твърдо i18n букви в jsp страница, можете да изберете правилно iso* pageEncoding.
<%@ 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>
Създавайки xml документ в jsp страница, трябва да напишете xml заглавка без водещи бели знаци или нови редове. Вижте как крайният таг на скриптлета и заглавката на xml са в един ред. Това е, което вграденият jsp код винаги трябва да взема предвид, невинен водещ whitechar може да съсипе добре форматираните отговори.
<%@ 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>