Я не могу отправить запрос Firefox в iso-8859-1

У меня есть приложение на Java EE, и у меня есть моя база данных в ISO-8859-1, поэтому мне нужно сделать кодировку jsp в ISO-8859-1... (все мои страницы в iso-8859-1)

У меня есть jsp с кодом javascript, который выполняет запрос к действию Struts.

Это мой js-код.

$.ajax({
    type:'GET',
    encoding:'iso-8859-1',      
    contentType: 'text/html;charset=ISO-8859-1',
    url: xUrl,
    success: function(){
        $("#MensajeOk").attr('style','display:block');
        $("#MensajeOk").delay(10000).slideUp(1000);
    }
});

с IE и Chrome все правильно, потому что он кодирует запрос в ISO-8859-1, а Firefox кодирует запрос в UTF-8, и это проблема для меня, потому что на стороне сервера мне нужен ISO-8859-1 и с FF есть некоторые символы, которые я не могу восстановить.

моя форма

<html:form action="/action.do" acceptCharset="iso-8859-1"> 
<input type="text" name="title">

and my java code is

new String((request.getParameter("title")+"").getBytes("iso-8859-1"),"iso-8859-1"));

с ним я могу нормально восстановить текст в IE и Chome, но не могу с Firefox.

Другим вариантом будет отправка запроса в кодировке UTF-8 с помощью encodeURI('data'), но на стороне сервера я не могу преобразовать текст из UTF-8 в ISO-8859-1...

Какая-то идея???

Большое спасибо и извините за мой английский!!


person markosca    schedule 04.05.2012    source источник
comment
new String(string.getBytes(encoding), encoding) — это избыточный цикл, эквивалентный string, потому что String.getBytes(encoding) и new String(bytes, encoding) являются обратными операциями друг друга.   -  person Christoffer Hammarström    schedule 07.05.2012


Ответы (1)


Глядя на документацию, похоже, нет опции с именем encoding, но есть хороший маленький намек (включая решение вашей проблемы) по contentType-варианту:

Данные всегда будут передаваться на сервер в кодировке UTF-8; вы должны правильно декодировать это на стороне сервера.

так что кажется, что firefox прав, а другие браузеры делают это неправильно - попробуйте удалить опцию encoding и выполнить преобразование на стороне сервера.

person oezi    schedule 04.05.2012
comment
я видел, что такой опции кодирования не существует, но если я добавлю опцию contentType, я получу на стороне сервера данные в UTF-8, а мне они нужны в ISO-8859-1. - person markosca; 04.05.2012
comment
Вы хоть читали, что там написано? добавление contentType не улучшит его - вы не можете надежно установить кодировку для отправки данных с помощью jquery. единственное, что нужно сделать, это удалить encoding, чтобы все браузеры отправляли utf-8, а затем преобразовать utf-8-to-ISO-8859-1 на вашем сервере перед обработкой данных. - person oezi; 04.05.2012
comment
Я могу это сделать ... Я могу получить данные на сервере в UTF-8 (POST всегда отправляет запрос в utf-88), но я не могу или не знаю, как конвертировать из UTF-8 в ISO без потерянные данные. - person markosca; 04.05.2012
comment
Вашей Java-программе нужна строка, а не байты, представляющие строку. Вам просто нужно вызвать request.getParameter(), и вы получите строку, декодированную движком сервлета. Когда вы отправляете строку в свою базу данных, ваш драйвер JDBC позаботится о ее правильном кодировании для вашей базы данных. Правильное исправление состоит в том, чтобы убедиться, что ваш механизм сервлета и ваш драйвер JDBC используют правильную кодировку. Ваша программа на Java не должна выполнять ручное кодирование или декодирование. - person Christoffer Hammarström; 07.05.2012