Tomcat a problémy s kódováním
Autor: Petr FerschmannPřed časem jsme měli problémy s kódováním češtiny v tomcatu. Při postu a getu se čeština občas pokazila.
Chtěl bych se tedy podělit s fíglem jak to vyřešit.
Problém nebyl v aplikaci, ale v konfiguraci tomcatu.
Na všech verzích tomcatu (4.x a 5.x) je potřeba přidat
-Dfile.encoding=utf-8
do CATALINA_OPTS (na debianu do /etc/default/tomcat5). Ve windows v Monitor Tomcat do Configure->Java->Java Options.
Pokud používáte tomcat 5.x (což je náš případ) musíte přidat i toto
URIEncoding="UTF-8"
do konfigurace connectoru v server.xml <Connector port="8080" ... URIEncoding="UTF-8" ... /> (více viz. dokumentace u apachů).


27. Prosinec 2005 v 20:07
Tohle řešení mi bohužel nefungovalo na Tomcatu 5.5 (.12 + Struts). Našel jsem i řešení pomocí filtru, které nakonec zafungovalo (uvedeno jako alternative):
http://wiki.apache.org/tomcat/Tomcat/UTF-8
3. Srpen 2006 v 10:09
Díky, díky, díky Ó VELIKÝ Tomcat GURU….
Právě jsem ušetřil 3 months práce, můžu jít na držkovou a pivo…. :)
10. Leden 2007 v 17:27
Ještě také někdy pomáhá použít ve formuláři:
<form accept-charset=”utf-8″>
11. Leden 2007 v 10:20
Tyhle rady jsou nesmyslné. U všech javových webových aplikací se musí udělat dvě věci:
- specifikovat výstupní kódování stránky
- specifikovat vstupní kódování HTTP požadavku
První se dělá voláním metody request.setCharacterEncoding(”utf-8″), umístění nejlépe ve filtru mapovaném na všechny URL.
Druhé se dělá při specifikaci typu výstupu, tj. response.setContentType(”text/html; charset=utf-8″)
U TomCatu 5.5 je ještě potřeba při předávání parametrů přes GET nastavit konfigiraci Coyote konektoru v souboru server.xml, musí se přidat useBodyEncodingForURI=”true”.
11. Leden 2007 v 12:00
V souboru http://www.ietf.org/rfc/rfc3986.txt je napsáno:
Non-ASCII characters must first be encoded according to UTF-8 [STD63], and then each octet of the corresponding UTF-8 sequence must be percent-encoded to be represented as URI characters.
Zde je definováno, že všechny znaky v URL musí být kódovány jako UTF-8. Ale to všechny prohlížeče nedělají (žádný?).
Když máte stránku v UTF-8 tak se tento problém neprojeví. Pokud tedy použijete jednoduchý POST, data jsou kódována jako GET a tím pádem můžou být kódovány špatně.
Když ovšem použijete enctype=”multipart/form-data”, řeknete, aby se data neposílala v URL, ale jako příloha HTTP požadavku,
kde už je kódování uvedeno.
11. Leden 2007 v 12:05
Ještě k -Dfile.encoding=utf-8:
Myslím, že to bylo nutné pro Tomcat 4.x, protože asi používal String.getBytes();
Souhlasím, že toto již dnes není zřejmě nutné.
30. Srpen 2007 v 10:33
Jak webovy server (TOMCAT) pozna, v jakem kodovani mu request prisel? (respektive v jakem kodovani jsou parametry POST/GET)
Je rozdil, v kodovani mezi metodami POST a GET?
u response je to jasny, tam se to nastavuje a prohlizec pak v stranku v danem kodovani zobrazi
jinak na tomcatu 5.5 (s jbossem) mi stacil pridat pouze ten filter
diky moc!
30. Srpen 2007 v 10:39
jinak u apachu pisou pro parametr: useBodyEncodingForURI
This 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, where the encoding specified in the contentType, or explicitely set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.
ale reauest zadny contentType nema ne? tak jak se muze podle content type urcit kodovani :)