Данные POST с различным набором символов - PullRequest
0 голосов
/ 07 мая 2011

Я использую Grails для получения данных по POST из нескольких внешних ресурсов.Мой контроллер Gails работает отлично, если набор символов публикуемых данных - UTF-8.

К сожалению, у меня также есть внешние источники, отправляющие данные в контроллер Grails с использованием набора символов 8859-1, и в результатенапример, текст не может быть правильно обработан.

Как я могу использовать grails, чтобы также иметь возможность получать данные POST различных наборов символов, в моем случае utf-8 и 8859-1?

У меня есть разные контроллеры и действия для каждого внешнего источника, отправляющего данные.

Спасибо Каролина

Ответы [ 2 ]

0 голосов
/ 08 мая 2011

Вы не можете надежно решить эту проблему только на стороне сервера, потому что в то время, когда вы получили декодированные строки в вашем контроллере grails, они уже были декодированы контейнером сервлета, предполагая, что поток байтов был в charset по умолчанию (utf-8) и CharsetDecoder ужезаменил недопустимые последовательности байтов на?Это означает, что вы не можете надежно получить исходные байты обратно из декодированных строк, чтобы повторно декодировать их с использованием некоторого другого набора символов (iso-8859-1).

Это можно решить на стороне клиента http, указав набор символов в заголовке типа содержимогопри публикации:

Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1

Другой вариант - опубликовать данные mutipart, а затем сервлет-контейнер приложения grails не будет декодировать байты в строку, и вам придется вручную декодировать их в строку, используя любую кодировку, которую вы хотите.

0 голосов
/ 07 мая 2011

Возможно, ISO-8859-1 просто не может кодировать эти символы, и первые 256 кодов в UTF-8 такие же, как и для ISO-8859-1 (поэтому, если это возможно, UTF-8 также будет успешным)

Так что проблема не в вашем конце, и вы не можете ее исправить.

...