2013-04-10 4 views
2

Когда я отправлю форму с помощью form.submit(), неанглийские символы (скажем, китайский, корейский) хранятся как искаженные в базе данных.данные искажены при использовании формы

Я использую следующий код в JSP:

<% 
response.setContentType("text/html;charset=utf-8"); 
response.setCharacterEncoding("UTF-8"); 
%> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
<body> 
<form name="TestForm" enctype="application/x-www-form-urlencoded" accept-charset="UTF-8" action="<%=formaction%>" method="POST"> 
    <table> 
    <tr><td>Source</td><td>:</td> 
    <td><input type="text" name="SOURCE"> </td></tr> 

    <tr><td>Category</td><td>:</td> 
    <td><input type="text" name="CATEGORY"> </td></tr> 

    <tr><td>Message</td><td>:</td> 
    <td><input type="text" name="MESSAGE"> </td></tr> 
    <tr><td><input type="submit" name="Submit" value="Ok"></td></tr> 
    </table> 
</form> 
</body> 
</html> 

Я устанавливаю параметры запроса, как Content-type, CharSet когда я отправить запрос Ajax. Он работает как ожидается в Ajax, но даже я установил эти атрибуты в форме, он не работает на form.submit().

+0

вы можете дать больше информации о вашем дб? которые вы используете? также вам нужно настроить свой db, а также использовать utf-8, а также обработчик формы –

+0

Я использую PostgreSQL с UTF-8 как charSet. Те же данные заполняются, когда я использую ajax. Тогда не должно быть проблем, правильно ли конфигурация db? – MatrixVJ

ответ

1

Спасибо за ваши комментарии. Я решил эту проблему. Я использовал собственный фильтр, не используя characterEncodingFilter, так как эта проблема возникла. После добавления этого фильтра и настройки в WEB-INF/web.xml все работает отлично.

Для получения дополнительной информации см этой вики: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

1

Попробуйте получить значение на стороне сервера, используя следующий код. Убедитесь, что кодировка символов устанавливается до getParameter

request.setCharacterEncoding("UTF-8"); 
String str = request.getParameter("fuzz-field"); 

также проверить, если ваш сервер URIEncoding установлен в UTF-8

Надеется, что это помогает

Вот примеру код, который я попробовал и получил это работаю

JSP

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

    <form id="form-sample" name="form-sample" method="post" action="/HTML5Sample/sampleservlet"> 
<!--field has the value of two Chinese characters.--> 
<input type="text" id="fuzz-field" name="fuzz-field" value="中文"/> 
<input type="submit" value="Submit"> 
</form>                        

Tomcat Server.xml

<Connector port="8080" protocol="HTTP/1.1" 
connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 

Servlet класс -

request.setCharacterEncoding("UTF-8"); 
String str = request.getParameter("fuzz-field"); 
System.out.println("character field " + str);  

Для просмотра этого на консоли Eclipse вам необходимо изменить настройки консоли - Window> Предпочтение> кодирования для UTF-8

+0

Трейд же, как вы упомянули, но не повезло. Когда я получаю тип кодирования, используя request.getCharacterEncoding(), он поступает как «UTF-8». Но данные искажены. – MatrixVJ

+0

Я вставил пример кода, вы можете проверить, какой сервер приложений вы используете? – rvini

Смежные вопросы