powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему post передаёт в кодировке iso-8859-1?
25 сообщений из 27, страница 1 из 2
Почему post передаёт в кодировке iso-8859-1?
    #39469534
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Методом post я передаю значение на этот же сервелет и отображаю его. Не смотря на то, что я:
добавил в server.xml значение: useBodyEncodingForURI="true" и перезапустил томкат;
а также написал utf8 где только можно;
а также в отладчике firefox я вижу нормальную строку для передачи в utf8.
Сам java всё равно получает строку как iso-8859-1. Из-за этого мне приходится конвертировать кодировку строки.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String username = (String) request.getParameter("username");

        // Не понимаю!!! ***********************************************************************
        String righusername = new String(username.getBytes("iso-8859-1"),"utf-8");
        // *******************************************************************************************

        righusername = righusername.toUpperCase();
        response.getWriter().println("<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title>Servlet bot</title></head><body><h1>to</h1><BR>");

        response.getWriter().println("<p>Ваше имя: " + righusername + "</p>");
        response.getWriter().println("<form action=\"bot\" method=\"POST\">");
        response.getWriter().println("<p>Введите имя пользователя: <input type=\"text\" name=\"username\"></p>");
        response.getWriter().println("<input type=\"submit\" value=\"Отправить\" />");
response.getWriter().println("</form>");
        response.getWriter().println("</body></html>");

        // processRequest(request, response);
}



Как заставить post принимать utf8 кодировку?
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469544
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxа также в отладчике firefox я вижу нормальную строку для передачи в utf8.
А в заголовках запроса что едет?
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469547
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469551
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxа также написал utf8 где только можно;

Читателям предлагается угадать, "где только можно", "можно ли там где нельзя", "есть ли разница между utf8 и UTF-8", а так же ответы на массу других вопросов.

azsxКак заставить post принимать utf8 кодировку?
Где-то таки UTF-8 не указан.
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469557
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала на страничке с которой уходит форма нужно указать что она в UTF-8

<meta charset="utf-8" />

иначе браузер воспримет ее кодировку по своему разумению.
Ежели Ваш браузер отправляте в ISO-LATIN значит
автора также в отладчике firefox я вижу нормальную строку для передачи в utf8.
вероятно сие есть неверное утверждения (т.е имеет место быть недопонимание между нами)
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469563
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дока к томкату говорит что
авторuseBodyEncodingForURI - his specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding , This setting is present for compatibility with Tomcat 4.1.x

т.е. этот параметр указывает что кодировка указанная в Content-Type заголовке должна быть использована для параметров в URI вместо кодировки указанной в URIEncoding и вообще это для совместимости с Tomcat 4.1

Открываем консоль браузера смотрим что за Content-Type в запросе.
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469575
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю, запутываюсь ещё больше. Вот мой post из консоли:
авторHost: localhost:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 45
Referer: http://localhost:8080/Testing/bot
Cookie: JSESSIONID=B07FAB87E0FB5DCA8DC5584F6FB13242
Connection: keep-alive
Upgrade-Insecure-Requests: 1

данные
username=%D1%81%D0%B5%D1%80%D1%91%D0%B3%D0%B0
Но почему нет кодировки? Я её где-то не указал, но где?
---
Мне дали ссылку, там написано, что надо, чтобы указание локали было первым. Но оно ведь первое?
Код: java
1.
2.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");


---
Как работать с jsp файлами я ещё не разобрался, то есть bot -- это сервелёт. Поэтому строку <%@page pageEncoding="UTF-8" %> мне не куда добавлять
---
<meta charset="utf-8" /> добавил слеш, опечатка.
---
В Content-Type у меня utf-8. А вотв post почему то кодировка не указана. Может правда для совместимости какая то настройка в томкат? Может так и надо и все конвертируют?
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469609
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Content-Type: application/x-www-form-urlencoded
это по дефолту если не указан enctype для формы
azsxНо почему нет кодировки? Я её где-то не указал, но где?

Тут, ниже, вам правду сказали
Мне дали ссылку, там написано, что надо, чтобы указание локали было первым. Но оно ведь первое?
Код: java
1.
2.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");


это обработка запроса post а не сама форма html страничка, а так все верно.

у вас bot сервлет что мешает вставить <meta charset="utf8"> в OutputStream и проставить Content-Type перед отдачей странички
Код: java
1.
2.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");




Может правда для совместимости какая то настройка в томкат? Может так и надо и все конвертируют?

вообще ставят URIEncoding в UTF-8
я обычно еще
ставлю URIEncoding в UTF-8, все html странички <meta charset="utf8", IDE в UTF8 настроить, jvm запускать с UTF8
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469614
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хаха doGet не выделился жирным
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469638
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в server.xml я сам добавил другой параметр, так как думал он мне поможет. Убрал его, выключил и включил томкат, на всякий случай скомпилировал приложение и положил егов каталог томката (а не просто запустил в netbeans). Смена параметра не помогла.
Код: html
1.
2.
3.
4.
5.
6.
    <Connector port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443" URIEncoding="UTF-8" />
    <!-- useBodyEncodingForURI="true" -->


Код doGet у меня по сути пустой:
Код: java
1.
2.
3.
4.
5.
6.
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        processRequest(request, response);
    }


Также в начале сервелета у меня также есть указание кодировки
Код: java
1.
2.
3.
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");


Ну я уже писал. Везде utf-8 поставил, где сумел. Почему она в post не передаётся?
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469684
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то вы не договариваете

все еще не видно как вы страничку формируете
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469686
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если принципиально то tag form имеет атрибут accept-charset где можно указать кодировку того что в форме

Код: plaintext
<form method="POST" accept-charset="utf-8">....
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469704
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь код моего сервелёта bot. Сперва открывается index.html (utf-8) указал его в web.xml. Затем по ссылке перехожу на страницу bot (utf-8) затем пытаюсь вводить по русски и отправляьб запрос.
На сегодня сдаюсь, потом подумаю.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
package test;

import com.sun.java.swing.plaf.windows.resources.windows;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "bot", urlPatterns = {"/bot"})
public class bot extends HttpServlet {
    

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<meta charset=\"utf-8\" />");
            out.println("<title>Servlet bot</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>main</h1>"); 
            

            out.println("<form action=\"bot\" method=\"POST\">");
    out.println("<p>Введите имя пользователя: <input type=\"text\" name=\"username\"></p>");
    out.println("<input type=\"submit\" value=\"Отправить\" />");
out.println("</form>");
            
            out.println("</body>");
            out.println("</html>");
            

        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        processRequest(request, response);
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //response.getWriter().println("<%@page pageEncoding=\"UTF-8\" %>");
                     String username = (String) request.getParameter("username");
                     //String righusername = new String(username.getBytes("iso-8859-1"),"utf-8");
                     String righusername = username;
                     righusername = righusername.toUpperCase();
    
            response.getWriter().println("<!DOCTYPE html><html><head><meta charset=\"utf-8\" /><title>Servlet bot</title></head><body><h1>to</h1><BR>");
charset=\"utf-8\">");
    
    response.getWriter().println("<p>Ваше имя: " + righusername + "</p>");
    
                response.getWriter().println("<form action=\"bot\" method=\"POST\">");
    response.getWriter().println("<p>Введите имя пользователя: <input type=\"text\" name=\"username\"></p>");
    response.getWriter().println("<input type=\"submit\" value=\"Отправить\" />");
response.getWriter().println("</form>");
            
            response.getWriter().println("</body></html>");

       // processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469766
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
            response.setCharacterEncoding("UTF-8");
            request.setCharacterEncoding("UTF-8");
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469767
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или в конфигах настрой
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469771
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно, баг воспроизводится в Firefox
согласно w3c приоритет следующий
Код: plaintext
1.
2.
   accept-charset 
   потом charset документа 
   потом по умолчанию UTF-8

accept-charset отсуствует в этой форме. У документа charset utf-8, т.к
Код: plaintext
<meta charset="utf-8">
согласно MDN обозначает кодировку документа причем еще даже указано что разрешено в документе использовать эту кодировку.
т.е. даже Content-Type тут не причем

остается понять где баг в Tomcat или Firefox вродне непонятно
вроде как по идее браузер должен кодировать в UTF-8 но не делает этого

кроме того если вручную прибавить к Content-Type кодировку
Код: plaintext
application/x-www-form-urlencoded; charset=utf-8
то все работает нормально, можно увидеть содержимое

здесь вот https://habrahabr.ru/post/140270/
в принципе тот же результат
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469782
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx, https://www.w3schools.com/charsets/ref_html_8859.asp ISO-8859-1
ISO-8859-1 is the default character in HTML 4.01.

ISO (The International Standards Organization) defines the standard character sets for different alphabets/languages.

The different variants of ISO-8859 are listed at the bottom of this page.
...
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469784
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

у него в meta же переопределена кодировка.
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469798
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут без Вади не обойтисьazsxВесь код моего сервелёта bot. Сперва открывается index.html (utf-8) указал его в web.xml. Затем по ссылке перехожу на страницу bot (utf-8) затем пытаюсь вводить по русски и отправляьб запрос.
На сегодня сдаюсь, потом подумаю.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
package test;

import com.sun.java.swing.plaf.windows.resources.windows;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "bot", urlPatterns = {"/bot"})
public class bot extends HttpServlet {
    

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            /* TODO output your page here. You may use following sample code. */
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<meta charset=\"utf-8\" />");
            out.println("<title>Servlet bot</title>");            
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>main</h1>"); 
            

            out.println("<form action=\"bot\" method=\"POST\">");
    out.println("<p>Введите имя пользователя: <input type=\"text\" name=\"username\"></p>");
    out.println("<input type=\"submit\" value=\"Отправить\" />");
out.println("</form>");
            
            out.println("</body>");
            out.println("</html>");
            

        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        processRequest(request, response);
    }


    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        //response.getWriter().println("<%@page pageEncoding=\"UTF-8\" %>");
                     String username = (String) request.getParameter("username");
                     //String righusername = new String(username.getBytes("iso-8859-1"),"utf-8");
                     String righusername = username;
                     righusername = righusername.toUpperCase();
    
            response.getWriter().println("<!DOCTYPE html><html><head><meta charset=\"utf-8\" /><title>Servlet bot</title></head><body><h1>to</h1><BR>");
charset=\"utf-8\">");
    
    response.getWriter().println("<p>Ваше имя: " + righusername + "</p>");
    
                response.getWriter().println("<form action=\"bot\" method=\"POST\">");
    response.getWriter().println("<p>Введите имя пользователя: <input type=\"text\" name=\"username\"></p>");
    response.getWriter().println("<input type=\"submit\" value=\"Отправить\" />");
response.getWriter().println("</form>");
            
            response.getWriter().println("</body></html>");

       // processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469799
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettUsman,

у него в meta же переопределена кодировка.Она не совсем определена, а скорее печатается
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469805
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usmanтут без Вади не обойтись
а что за ide?
в какой кодировке?
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469808
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ьак лучше

out.println("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469812
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем большое спасибо, помог совет Hett
авторresponse.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
То есть я поставил и запрос и ответ в трёх местах, чтобы он был utf-8 и сразу заработало. Решено.
---
авторНу или в конфигах настрой
Hett, Usman -- но я же по совету выше уже указал в конфиге server.xml
автор <Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8" />
<!-- useBodyEncodingForURI="true" -->
Только он почему то не ставится utf-8, а возвращает по дефолтным настройкам iso-8859-1. Какой мне конфиг надо исправить?
Или где посоветуете почитать настройку tomcat на русском?
---
Вадя, я пробую в netbeans, проект у меня в utf-8.
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469816
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxВадя, я пробую в netbeans, проект у меня в utf-8.
тогда зачем так извращаться ?
он сам всё сделает
...
Рейтинг: 0 / 0
Почему post передаёт в кодировке iso-8859-1?
    #39469818
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадя нет netbeans сам поставил только строку
response.setContentType("text/html;charset=UTF-8");
и то ниже, чем другой вывод (точно уже не помню).
Самое главное я разобрался. Вдруг враги netbeans сопрут и в notepad++ писать заставят :)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему post передаёт в кодировке iso-8859-1?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]