Я разрабатываю на основе eclipse3.2+j2ee5.0+tomcat5.09+mysql5.0.
Во-первых, можно решить искаженные китайские данные в форме POST.
Этот тип китайских данных можно фильтровать в режиме реального времени с помощью фильтров. Код фильтров следующий:
фильтры пакета;
import java.io.IOException;
импортировать javax.servlet.Filter;
импортировать javax.servlet.FilterChain;
импортировать javax.servlet.FilterConfig;
импортировать javax.servlet.ServletException;
импортировать javax.servlet.ServletRequest;
импортировать javax.servlet.ServletResponse;
импортировать javax.servlet.UnavailableException
общедоступный класс SetCharacterEncodingFilter реализует фильтр ... {
защищенная строковая кодировка = null;
защищенный FilterConfig filterConfig = null;
защищенное логическое игнорировать = true
общественного недействительными уничтожить () ... {
this.encoding = ноль;
this.filterConfig = ноль;
}
Public void doFilter (запрос ServletRequest, ответ ServletResponse,
Цепочка FilterChain)
выдает IOException, ServletException ...{
// Условно выбирает и устанавливает используемую кодировку символов
if (игнорировать || (request.getCharacterEncoding() == null)) ...{
Кодировка строки = selectEncoding(запрос);
если (кодировка!= ноль)
request.setCharacterEncoding(кодировка);
}
// Передаем управление следующему фильтру
Chain.doFilter(запрос, ответ);
}
Public void init(FilterConfig filterConfig) выдает ServletException ... {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("кодирование");
Строковое значение = filterConfig.getInitParameter("игнорировать");
если (значение == ноль)
this.ignore = правда;
иначе, если (value.equalsIgnoreCase("истина"))
this.ignore = правда;
иначе, если (value.equalsIgnoreCase("да"))
this.ignore = правда;
еще
this.ignore = false;
}
protected String selectEncoding (запрос ServletRequest) ... {
возврат (this.encoding);
}
}
конфигурация фильтров (конфигурация web.xml):
<фильтр>
<имя-фильтра>Установить кодировку символов</имя-фильтра>
<класс-фильтра>filters.SetCharacterEncodingFilter</класс-фильтра>
<инициализирующий параметр>
<имя-параметра>кодировка</имя-параметра>
<значение параметра>GBK</значение параметра>
</инициализирующий-параметр>
</filter>
<отображение фильтра>
<имя-фильтра>Установить кодировку символов</имя-фильтра>
<url-шаблон>/*</url-шаблон>
</отображение фильтра>
В качестве примера в MySQL рассмотрена
проблема искажения символов при сохранении китайских данных в базе данных
. Просто перепишите строку подключения:jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK.
3. Проблемы с передачей параметров через URL и определением китайских имен файлов
. Симптомы проблемы: 1. Передача параметров через URL, например:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student. Партийное здание
Значение, полученное с помощью request.getParameter("levleName"), — это Ранма.
2. Распознавайте имена файлов на китайском языке, например:
<img src="./pic/Sichuan Map.jpg"> Изображения не могут отображаться.
Решение:
1. Если вы хотите решить только первую проблему, это очень просто. Всего две строки кода:
String role=request.getParameter("chara");
role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(роль);
Потому что сервер Tomcat по умолчанию использует набор символов ISO-8859-1. Но это может решить только первую проблему, но не проблему с китайским именем файла.
2. Решите две проблемы вместе. Измените файл server.xml, найдите следующий оператор и добавьте URIEncoding="GB18030", чтобы обе проблемы были решены вместе ( роль не требуется) =new String(role.getBytes("ISO-8859-1"),"GB2312 Conversion, полученные параметры - обычные китайские)
<Connector AcceptCount="100" ConnectionTimeout="20000" debug="); 0" DisableUploadTimeout="true" EnableLookups="false" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="81" redirectPort="8443"/>
Кроме того, во многих статьях рассказывается, что вы можете добавить URIEncoding="UTF-8", что может решить проблему с китайским именем файла, но когда вы получаете параметры, передаваемые по URL-адресу, через String role=request.getParameter("chara"); , вы получаете кодировку UTF-8, ее необходимо преобразовать в GB2312, что затруднительно.
Вышеизложенное представляет собой краткое изложение моего использования. Я надеюсь, что каждый сможет высказать ценное мнение.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx