Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Brak polskich znakow w request w JSP

1,113 views
Skip to first unread message

wel...@gazeta.pl

unread,
Aug 2, 2004, 8:06:15 AM8/2/04
to
Czesc
mam taki problem. jest prosty formularz w jsp:
<%@ page contentType="text/html; charset=iso-8859-2" %>
<html>
<head>
<title>Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>

<body>
<form action="dalej2.jsp" method="post" name="formularz">
imie: <input name="imie" type="text"><br>
Nazwsiko: <input name="nazwisko" type="text"><br>
<input name="" type="submit">
</form>

</body>
</html>


przsylam dane dalej do:
<%@ page contentType="text/html; charset=iso-8859-2" language="java"
import="java.sql.*" errorPage="" %>
<html>
<head>
<title>Pokaż</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
</head>

<body>
<p>imię: <% out.print(request.getParameter("imie")); %></p>
<p>imię: <% out.print(request.getParameter("nazwisko")); %></p>
<a href="form.jsp">wróć</a>
</body>
</html>

i odebrane parametry nie maja polskich liter tylko smietnik.
W czy moze byc problem? Moze jakies ustawienia Tomcata?

Pozdro
Seba


brajek

unread,
Aug 3, 2004, 5:28:42 AM8/3/04
to
On Mon, 2 Aug 2004 14:06:15 +0200, <wel...@gazeta.pl> wrote:

W pierwszym pliku nic nie musisz zmieniac, bo tam nie pobierasz
parametrow. W drugim musisz ustawic odpowiednie kodowanie znakow w
request'cie. Sluzy do tego metoda setCharacterEncoding() obiektu
request. Dodaj na poczatku, zanim pobierzesz jakiekolwiek dane z
request'u taka linijke:

request.setCharacterEncoding("8859_2");

Wiec, twoj kod wygladac powinien tak:

<%@ page contentType="text/html; charset=iso-8859-2" language="java"
import="java.sql.*" errorPage="" %>

<%
request.setCharacterEncoding("8859_2");

%>
<html>
<head>
<title>Pokaż</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-2">
</head>

<body>
<p>imię: <% out.print(request.getParameter("imie")); %></p>
<p>imię: <% out.print(request.getParameter("nazwisko")); %></p>
<a href="form.jsp">wróć</a>
</body>
</html>

--
Pozdrawiam,
brajek

Sebastian

unread,
Aug 3, 2004, 2:30:58 PM8/3/04
to
Hej!

Użytkownik "brajek" <_mielonk...@poczta.onet.pl> napisał w wiadomości
news:hkmug0ln1icrkd1f2...@4ax.com...


> On Mon, 2 Aug 2004 14:06:15 +0200, <wel...@gazeta.pl> wrote:
>
> W pierwszym pliku nic nie musisz zmieniac, bo tam nie pobierasz
> parametrow. W drugim musisz ustawic odpowiednie kodowanie znakow w
> request'cie. Sluzy do tego metoda setCharacterEncoding() obiektu
> request. Dodaj na poczatku, zanim pobierzesz jakiekolwiek dane z
> request'u taka linijke:
>
> request.setCharacterEncoding("8859_2");


Niesety jakos to u mnie inaczej dziala. W kazdym razie teraz doszedlem do
momentu kiedy pobieram z request juz wszystkie polskie znaki i niby jest ok,
ale musi to byc tak, ze linijka pierwsza nie wyglada tak:

<%@ page contentType="text/html; charset=iso-8859-2" language="java"
import="java.sql.*" errorPage="" %>

tylko tak:

<%@ page contentType="text/html;" language="java" import="java.sql.*"
errorPage="" %>

natomiast potem w czystym htmlu musi byc:


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

W kazdym innym przypadku zamaist polskich znakow sa znaki zapytania.


Ale nastepna rzecz to jest wpiasanie ich do bazy (mySQL). No i mimo, ze
kiedy wysiwtlam string pytania to sa w nim polskie fonty to w bazie sa juz
zapisane jako znaki zapytania. Jak z ta sama baza uzywam php to nie ma
problemu. Poniezej kod pliku zapisjuzjavego do bazy:

<%@ page contentType="text/html;" %>
<HTML>
<HEAD>
<TITLE>Fonty</TITLE>


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">

</HEAD>
<BODY>
<%@ page import="java.sql.*" %>

<%
Connection con = null;
Statement st = null;
ResultSet rs = null;
String pytanie = "";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:tomcatBaza","","");
st = con.createStatement();
pytanie = "INSERT INTO `users` ( `login` , `haslo` , `mail` , `idUser` ,
`imie` , `nazwisko` ) VALUES ( '', '', '', '', '"
+ request.getParameter("imie") + "', '" + request.getParameter("nazwisko")
+ "');";
out.print(pytanie + "<br>");
st.executeUpdate(pytanie);

pytanie = "SELECT * FROM users";
rs = st.executeQuery(pytanie);
while (rs.next())
{
out.print(rs.getString("imie") + " " + rs.getString("nazwisko") + "<br>");
}
%>


<a href="form.jsp">wróć</a>

</BODY>
</HTML>

Pozdrawiam!
Sebastian


Piotr Zalewski

unread,
Aug 4, 2004, 2:49:55 AM8/4/04
to
Użytkownik Sebastian napisał:

> Hej!
>
> Użytkownik "brajek" <_mielonk...@poczta.onet.pl> napisał w wiadomości
> news:hkmug0ln1icrkd1f2...@4ax.com...
>
>>On Mon, 2 Aug 2004 14:06:15 +0200, <wel...@gazeta.pl> wrote:
>>
>>W pierwszym pliku nic nie musisz zmieniac, bo tam nie pobierasz
>>parametrow. W drugim musisz ustawic odpowiednie kodowanie znakow w
>>request'cie. Sluzy do tego metoda setCharacterEncoding() obiektu
>>request. Dodaj na poczatku, zanim pobierzesz jakiekolwiek dane z
>>request'u taka linijke:
>>
>>request.setCharacterEncoding("8859_2");
>
>
>
> Niesety jakos to u mnie inaczej dziala. W kazdym razie teraz doszedlem do
> momentu kiedy pobieram z request juz wszystkie polskie znaki i niby jest ok,
> ale musi to byc tak, ze linijka pierwsza nie wyglada tak:
>
> <%@ page contentType="text/html; charset=iso-8859-2" language="java"
> import="java.sql.*" errorPage="" %>
>
> tylko tak:
>
> <%@ page contentType="text/html;" language="java" import="java.sql.*"
> errorPage="" %>
>
> natomiast potem w czystym htmlu musi byc:
> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
>
> W kazdym innym przypadku zamaist polskich znakow sa znaki zapytania.


To ciekawe - bo u mnie w aplikacji jest napewno 1 wariant + oczywiscie
ustawienie encodingu w html + w servlecie ustawienie request.setEncoding .
I bardzo ladnie dziala.


> Ale nastepna rzecz to jest wpiasanie ich do bazy (mySQL). No i mimo, ze
> kiedy wysiwtlam string pytania to sa w nim polskie fonty to w bazie sa juz
> zapisane jako znaki zapytania. Jak z ta sama baza uzywam php to nie ma
> problemu. Poniezej kod pliku zapisjuzjavego do bazy:
>

> Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
> con = DriverManager.getConnection("jdbc:odbc:tomcatBaza","","");
>

Dlaczego laczac sie do Mysql-a uzywasz sterownika odbc? Nie możesz użyć
bezpośrednio jconnectora z www.mysql.com ?
Wtedy ustaw w url do bazy odpowiednie parametry ( o ile pamietam
useUnicode i charset - znajdziesz to w pliku readme).

--
"Gdyby marzycieli brać serio, musiano by wydatnie rozbudować Izby
Wytrzeźwień." (Horacy Safrin)

brajek

unread,
Aug 4, 2004, 6:37:13 AM8/4/04
to
On Tue, 3 Aug 2004 20:30:58 +0200, "Sebastian" <wel...@gazeta.pl>
wrote:

>Niesety jakos to u mnie inaczej dziala. W kazdym razie teraz doszedlem do
>momentu kiedy pobieram z request juz wszystkie polskie znaki i niby jest ok,
>ale musi to byc tak, ze linijka pierwsza nie wyglada tak:
>
> <%@ page contentType="text/html; charset=iso-8859-2" language="java"
>import="java.sql.*" errorPage="" %>
>
>tylko tak:
>
> <%@ page contentType="text/html;" language="java" import="java.sql.*"
>errorPage="" %>
>
>natomiast potem w czystym htmlu musi byc:
><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
>
>W kazdym innym przypadku zamaist polskich znakow sa znaki zapytania.

Dziwne. Sprawdzilem u siebie i masz racje, _wyswietla_ poprawnie
polskie znaki, kiedy pominiesz w dyrektywie page charset i nie
bedziesz ustawial kodowania w request'cie. Tylko, ze znaki, ktore sa
wyswietlane nie sa w ISO-8859-2 - w zrodle strony sa jako encje
Unicode. A u Ciebie? Tez sa jako encje? Czy masz binarny zapis w
8859-2?

> Ale nastepna rzecz to jest wpiasanie ich do bazy (mySQL). No i mimo, ze
>kiedy wysiwtlam string pytania to sa w nim polskie fonty to w bazie sa juz
>zapisane jako znaki zapytania. Jak z ta sama baza uzywam php to nie ma
>problemu. Poniezej kod pliku zapisjuzjavego do bazy:

<CUT>

Ni ODBC ni MySQL'a nie wiem jak dobrze ustawic, ale przede wszystkim
wydaje mi sie, ze wazna informacja byloby wiedziec jaki jest encoding
znakow w Stringach..


--
Pozdrawiam,
brajek

wel...@gazeta.pl

unread,
Aug 9, 2004, 8:43:03 AM8/9/04
to
> Dziwne. Sprawdzilem u siebie i masz racje, _wyswietla_ poprawnie
> polskie znaki, kiedy pominiesz w dyrektywie page charset i nie
> bedziesz ustawial kodowania w request'cie. Tylko, ze znaki, ktore sa
> wyswietlane nie sa w ISO-8859-2 - w zrodle strony sa jako encje
> Unicode. A u Ciebie? Tez sa jako encje? Czy masz binarny zapis w
> 8859-2?
Szczerze mowiac to nie wiem jak to sprawdzic. :( Co to sa encje?


> Ni ODBC ni MySQL'a nie wiem jak dobrze ustawic, ale przede wszystkim
> wydaje mi sie, ze wazna informacja byloby wiedziec jaki jest encoding
> znakow w Stringach..

Dosc dziwna sprawa, bo kiedy wywoluje response.getCharacterEncoding() to mi
zwraca 8859-1! 1 a nie 2.

A jesli ustawie przed pobraniem czegokolwiek
request.setCharacterEncoding("8859_2"); to pokazuje same znaki zapytania
zamiast polskich literek.

Pozdrawiam!
Sebastian

>
>
> --
> Pozdrawiam,
> brajek


brajek

unread,
Aug 10, 2004, 5:40:51 AM8/10/04
to
On Mon, 9 Aug 2004 14:43:03 +0200, <wel...@gazeta.pl> wrote:

> Szczerze mowiac to nie wiem jak to sprawdzic. :(

FireFox: View | Page Source
IE: Widok | Źródło

> Co to sa encje?

W tym przypadku encje służą jako referencje do znaków. Encja zawiera
numer pozycji kodowej znaku. Encja zaczyna się znakiem &, później jest
znak # poprzedzony wartością kodową a kończy się znakiem ; (średnik).
Na przykład zamiast przesyłać znak o wartości binarnej 261 przesyłasz
encję, która jest odwołaniem do tego znaku, tj. zapis &#261;

Jeśli klient potrafi wyświetlić poprawnie encje, to efekt końcowy
wyświetlenia jest w przypadku użycia encji, taki sam, jak i bez ich
użycia.

...cut...

>Dosc dziwna sprawa, bo kiedy wywoluje response.getCharacterEncoding() to mi
>zwraca 8859-1! 1 a nie 2.

A masz ustawione <%@ page contentType="text/html; charset=8859_2"%>?
Jak nie masz to serwer wybiera domyślne, w tym przypadku 8859-1.

>A jesli ustawie przed pobraniem czegokolwiek
>request.setCharacterEncoding("8859_2"); to pokazuje same znaki zapytania
>zamiast polskich literek.

Musisz mieć request i response CharacterEncoding poprawnie ustawiony.
Pierwszy do tego, żeby pobierane dane były dobrze zakodowane, a drugi
do tego, żeby dane przesłane do klienta były poprawne.

Zrób tak:
Na obu stronach (tej z formularzem i tej co wyświetla dane) ustaw:
<%@ page contentType="text/html; charset=8859_2"%>

Na obu stronach umieść w HTML'u meta taga:
<meta http-equiv="content-type" content="text/html;
charset=iso-8859-2">

Na stronie pobierającej dane z formularza i wyświetlającej te dane
ustaw wywolaj request.setCharacterEncoding("8859_2") przed pobraniem
jakichkolwiek danych z request'u.

Powinno być OK.

--
Pozdrawiam,
brajek

wel...@gazeta.pl

unread,
Aug 12, 2004, 4:01:41 AM8/12/04
to

> > Szczerze mowiac to nie wiem jak to sprawdzic.

>


> FireFox: View | Page Source
> IE: Widok | Źródło

He, he! :) Tak sprawdzalem, ale poniewaz nic nie widzialem
podejrzanego(literki byly wyswietlane normalnie), wiec pomyslalem, ze to
jednak nie o to chodzi. :)

> Zrób tak:
/cut/

> Powinno być OK.
I jest ok! Dodatkowy problem wynikal z tego, ze pisalem zawsze 8859-2 a nie
8859_2. Poza tym probowalem jeszcze rozne waracje w stylu iso-8859-2 itd.

Teraz jest ok, nas stronie pokazuje wszystkie polskie literki i do bazy tez
zapisuje jak trzeba!

Wielkie Dzieki!
Pozdrawiam!
Sebastian

0 new messages