2009-09-03 5 views
1

Я программирую некоторые сайты с JSP-скриптом, и у меня возникла странная проблема с параметрами urlencoded web-formular. Сам сайт кодируется в iso-8859-1.Невозможно получить urlencoded umlauts. [solution: use UTF8]

У меня есть простая веб-форма с полем description.

Если я вхожу в немецкий Umlauts или специальные символы, такие как «ü» или «ß», они получают автоматически urlencoded. Но если я хочу прочитать этот параметр, я всегда получаю null.

String description = request.getParameter("description"); 

Если я ввожу некоторые китайские слова, как 專業人士, они urlencoded тоже. Тем не менее, я могу прочитать их без получения null.

Это поведение не меняется, если я использую метод «пост» или «получить». Я попытался «сутенер» моей веб-формы с текстом ниже, но это тоже не помогло.

accept-charset="ISO-8859-1" enctype="application/x-www-form-urlencoded" 

Мой вопрос: Почему я не могу получить urlencoded немецких умляутов, но некоторые китайские слова?

+0

описание всегда жёстко строка «Описание»? –

+0

Да, это всегда одна и та же строка. – Johannes

ответ

1

Китайский с ISO-8859-1 не работает, но немецкий должен. Если китайцы закодированы в любом случае, может быть, ваша форма кодируется в UTF-8? Какой браузер вы используете? Что такое шифрование JSP? Вы всегда должны использовать UFT-8, а не Latin 1. В настоящее время каждый браузер и сервер должны поддерживать UTF-8 в каждой ОС.

Мой опыт в том, что GET ist часто не работает с кодировкой, но POST должен делать. Параметры формы accept-charset и enctype верны. Какой сервер вы используете?

СПЯ тип контента, как правило, устанавливается:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
         pageEncoding="ISO-8859-1" %> 
+0

Я знаю, что латинский 1 «устарел», но я привязан к некоторым устаревшим системам. Я могу переключиться на UFT-8, но это не так просто. Кодирование самого файла, метатега и директив страниц задано как iso-8859-1. <% @ page contentType = "text/html; charset = ISO-8859-1"%> <% request.setCharacterEncoding ("ISO-8859-1"); response.setCharacterEncoding («ISO-8859-1»); %> Browser: Firefox, IE 6, Safari, Opera .. что вы хотите сервера: IIS + Resin (Java EE сервер из caucho.com) GET для этой формы был только для тестирования. Я тоже предпочитаю POST. Спасибо за помощь. – Johannes

+0

Не устанавливайте кодировку в запросе или ответе таким образом. Просто contentType на странице. –

+0

Спасибо! Я попробую это завтра. Почему лучше установить эти кодировки с помощью директивы page? – Johannes

1

Я подозреваю, что ваша кодировка страницы или сервлета - UTF-8. Закодированный латинским языком Umlaut является недопустимой последовательностью UTF-8, поэтому вы получаете NULL.

Когда вы вводите китайский язык, браузер знает, что он не может кодировать его на латинском языке 1, поэтому он автоматически переходит в UTF-8. Вот почему китайцы работают.

Если вы можете опубликовать некоторую трассировку HTTP, мы можем это подтвердить.