Проблемы с кодировкой UTF-8, JSP, jQuery, Spring - PullRequest
5 голосов
/ 24 августа 2011

У меня есть веб-приложение с Spring, JSP и JQuery в Apache Tomcat 6, одна страница JSP имеет форму, которая отправляет данные с помощью вызова AJAX с JQuery, в Spring MultiActionController на моем бэкэнде.

Проблема со строками UTF-8 в форме ввода.

Я уже сделал следующие вещи:

В моем HTML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page language="java" pageEncoding="utf-8"%>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<head> 
.
.

Вкл.ajax-вызов jquery:

$.ajaxSetup({ scriptCharset: "utf-8" ,contentType: "application/x-www-form-urlencoded; charset=UTF-8" });
    $.ajax(
        {
            type: "GET",
            url: "./saveData.action",
            contentType: "charset=utf-8",
            data: { name: $('#name').val(),...

На сервере tomcat:

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

На контроллере MultiActionController

public ModelAndView saveData(HttpServletRequest request,HttpServletResponse response) 
    throws ServletException, IOException 
    {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");

Так что если в параметре name я поставлюкак то так:

Мария

в бэкэнде получаю

Мариа.

Я ужеперепробовал все то, о чем я читал, и я не знаю, в чем ошибка, спасибо за любую помощь:)

Ответы [ 2 ]

16 голосов
/ 24 августа 2011

Все выглядит хорошо до тех пор, пока вы не получите параметр в переменной. Это всего лишь ваш бэкэнд, который все еще должен быть настроен для использования UTF-8. Например, System.out.println() или регистратор, в который вы отправляете полученный параметр, также должен использовать UTF-8. Или база данных, в которой вы храните полученный параметр, также должна использовать UTF-8. Или драйвер JDBC, который взаимодействует с этой БД. Или текстовый файл, в который вы записываете данные. Etcetera.

Смотри также:


Не имеет отношения к вашей конкретной проблеме, линия

request.setCharacterEncoding("UTF-8");

должно быть выполнено до Spring вступает в силу. Он устанавливает кодировку POST-запроса, и он завершается ошибкой всякий раз, когда Spring определяет тело запроса перед выполнением действия (обратите внимание, что эта строка полностью не влияет на запросы GET) , Spring имеет CharacterEncodingFilter, который делает именно это. Зарегистрируйте это в своем web.xml:

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
2 голосов
/ 24 августа 2011

У меня возникла та же проблема с символами, и я решил ее следующим образом:

request.setCharacterEncoding("utf-8");
                StringBuffer requestContent = new StringBuffer();
                do
                {
                    bytesRead = request.getInputStream().readLine(bytes,0,bytes.length);
                    if(bytesRead > 0)
                    {
                        requestContent.append(new String(bytes,0,bytesRead,"UTF-8"));
                    }
                }
                while(bytesRead > 0);

, а затем получил запрос. Содержимое вашей строки начиналось с "name ="

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...