<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
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
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
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)
>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
> 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
> 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 ą
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
>
> 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