явно не вказано назву сторінки. Про це треба завжди пам'ятати - Java не буде намагатися передбачити кодування байтів, які Ви передаєте для створення рядка String (так само вона не зможе прочитати Ваші думки з цього приводу :-). Вона просто використовує поточну кодування за замовчуванням. Т.к. ця настройка одна на всі перетворення, іноді можна наткнутися на неприємності. p> Для перетворення з байтів в символи і назад слід користуватися тільки цими методами. Просте приведення типу використовувати в більшості випадків не можна - кодування символів при цьому не буде враховуватися. Наприклад, однією з найбільш поширених помилок є читання даних побайтно за допомогою методу read () з InputStream, а потім приведення отриманого значення до типу char:
InputStream is = ..;
int b;
StringBuffer sb = new StringBuffer ();
while ((b = is.read ())! = -1)
{p> sb.append ((char) b);//
Якщо ж Вам не пощастило, і у Вас старіша версія - для досягнення результату доведеться поізвращаться:
Оригінальний спосіб роботи з кодуваннями пропонує Russian Apache - тут розписано, як саме. p> Своє рішення проблеми так само запропонував В'ячеслав Педак. p> Ну а самий найпростіший варіант витягти таки символи - передавати в комплекті параметрів ім'я кодування (або, якщо ви впевнені в поточній кодуванні броузера, використовувати зумовлену кодування) і використовувати метод перекодування символів:
public void doPost (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{p>// Кодування повідомлень, використана engine
// Деякі використовують ISO-8859-1, деякі кодування
// за замовчуванням - однаковості тут немає
String requestEnc = "ISO-8859-1";
// Кодування, встановлена ​​в броузері
String clientEnc = request.getParameter ("charset");
if (clientEnc == null) clientEnc = "Cp1251";
// Отримання параметра
String value = request.getParameter ("value");
// p> if (value! = null)
value = new String (value.getBytes (requestEnc), clientEnc);
... <В
JSP p> Технологія JSP (Java Server Pages) дуже схожа на сервлети. По суті справи сервер, при запиті в перший раз на льоту генерує з jsp-сторінок код сервлета, компілює його і запускає його як звичайний сервлет. Тому у JSP виникають схожі проблеми при роботі з російськими буквами. Однак вирішуються вони трохи по іншому. Є три місця де можуть виникнути труднощі - російські літери всередині самої jsp-сторінки, у відповіді клієнту і в запиті від клієнта. Перші два вирішуються завданням на початку сторінки тега page:
В
Побачивши цю директиву сервер розуміє, що сторінка записана у зазначеній кодуванні, і що в сгенеренний код треба додати виклик response.setContentType () із зазначеним contentType. Якщо сервер підтримує специфікацію Servlet 2.3, то він також додасть і виклик request.se...