Декодирование международных символов в AppEngine

Я делаю небольшой проект в Google AppEngine, но у меня проблемы с международными символами. Моя программа берет данные от пользователя через URL-адрес "page.html?data1&data2..." и сохраняет их для последующего отображения.

Но когда пользователь использует некоторые международные символы, такие как åäö, он кодируется как %F4, %F5 и %F6. Я предполагаю, что это связано с тем, что в http-запросах разрешены только первые 128 (?) символов в таблице ASCII.

Есть ли у кого-нибудь хорошее решение для этого? Любой простой способ декодировать текст? И лучше ли декодировать его перед сохранением данных или мне следует декодировать его при отображении пользователю.


person Irro    schedule 02.05.2010    source источник


Ответы (2)


URL-адреса могут содержать что угодно, но они должны быть закодированы. В Java вы можете использовать URLEncoder и < a href="http://java.sun.com/javase/6/docs/api/java/net/URLDecoder.html" rel="nofollow noreferrer">URLDecoder для кодирования и декодирования URL-адресов с нужным кодировка символов.

Имейте в виду, что эти классы на самом деле предназначены для кодирования HTML-форм, но их можно применять к строке запроса (параметрам) URL-адресов, поэтому не используйте их для всех URL-адресов — только для параметров.

person Bozho    schedule 02.05.2010
comment
Получил несколько вопросительных знаков вместо %-кодов. Но я должен быть в состоянии решить это как-то. Спасибо за помощь! - person Irro; 02.05.2010
comment
Для других с моей проблемой: я заработал, используя декодирование ISO-8859-1. Почему-то UTF-8 не работал. - person Irro; 02.05.2010
comment
Кодировка содержимого URL-адреса зависит от браузера и от кодировки страницы, содержащей URL-адрес или форму. Попробуйте явно обслуживать страницу, содержащую форму, как UTF-8. ISO-8859-1 может решить вашу насущную проблему, но лишит пользователей возможности использовать подавляющее большинство символов Юникода. - person Nick Johnson; 02.05.2010

Спецификация URI (RFC 3986) ограничивает символы, которые можно использовать в URI (см. a href="http://tools.ietf.org/html/rfc3986#appendix-A" rel="nofollow noreferrer">ABNF) и определяет схему процентного кодирования для передачи "небезопасных" символов. Как говорит Божо, часть запроса URL-адреса обычно кодируется как согласно спецификации HTML (application/x-www-form -urlencoded).

В документе для App Engine говорится:

App Engine использует стандарт Java Servlet для веб-приложений.

Таким образом, вам, вероятно, следует позволить Servlet API декодировать параметры для вас. См. методы параметров в HttpServletRequest. . Этот тип кодирования обычно должен храниться на уровне представления, поэтому данные будут храниться в незакодированном виде.

Если вы делаете что-то вручную, взгляните на этот пост в блоге об обработке символов в URI.

person McDowell    schedule 02.05.2010
comment
Вместо этого возникла другая проблема, но это было действительно полезно. Спасибо! - person Irro; 02.05.2010