Martin Kuba wrote:
Pavel Rezny wrote:
Moc nechapu, proc chcete mit jednu stranku s ruznym kodovanim.
Bud pouzijte pro vsechno utf-8, to je nejlepsi, nebo
pokud potrebujete podporovat nejake strare prohlizece, kter utf-8 neumi
(jsou jeste takove?), tak v JSP strankach nespecifikujte kodovani vubec
a rozhodujte ho v nejakem filtru.
Napriklad proto, ze data v jiz existujici DB jsou kodovana nejak
jinak nez UTF-8 a vyuzivana jeste nejakou jinou aplikaci, tak je
zbytecne provadet za behu dalsi prekodovani.
To je naproste nepochopeni toho, jak prace se znaky v Jave funguje.
Vsechny znaky jsou v Jave vnitrne kodovany jako UTF-16, takze
pri nacteni dat z databaze k tomu prekodovani stejne dojde, at chcete
nebo nechcete. A pri generovani webove stranky (respektive response
od servletu) zase musi dojit k prekodovani z vnitrni reprezentace
na vystupni kodovani, ktere nema s kodovanim v nejake databazi
zhola nic spolecneho.
Cili to jak jsou data kodovana v nejake databazi nema zadny vliv
na to, v jakem kodovani budete produkovat webove stranky. Stejne
jako to nijak nesouvisi s kodovanim nejakeho textoveho souboru, ze
ktereho byste znaky pripadne nacital. A to napriklad textoveho
souboru se zdrojem JSP stranky. To muze byt prekvapive, ale je to
logicke.
Pro pristup do DB pouzivame Hibernate a pokud byla DB win-1250 a
stranka byla win-1250 bylo vse spravne, ale pokud byla stranka v
html-head-meta oznacena jako UTF-8 nebylo kodovani spravne, i kdyz v
Tapestry 3 (http://jakarta.apache.org/tapestry/) bylo vse nastaveno na
UTF-8 (jeste nebylo pouzivano JSF).
Takze jeste proverim, jak jsou opravdu predavana data z Hibernate a
jestli by tedy bylo mozne nastavit kodovou stranku vzdy na UTF-8 bez
ohledu na to, jak jsou ulozena data v DB.
Ano vnitrni reprezentaci Stringu v Jave chapu presne tak, jak jste
popsal vyse, a samozrejme pokud se pouziji nastroje javy pro nacitani z
DB/souboru, tak se vzdy uvadi v jakem kodovani je zdroj. Ale protoze
jsem si nebyl vubec jisty, jak data dostavam z DB a mel jsem predchozi
spatnou zkusenost, tak jsem nechtel omezit stranky pouze na UTF-8. Ale
pokud to nebude pusobit zadny problem, budu jedine rad, kdyz budou
stranky vzdy v UTF-8.
BTW: V JSF jsem zatim stale nenasel moznost definovat kodovani na
urovni servletu (ve web.xml aplikace :-( Takze to zatim vypada na
uvedeni kodovani v kazdem JSP a nebo rucnim nastavenim do response.
A pokud chci pouzit stejne stranky v jine aplikaci s jinym
kodovanim, tak to nechci v kazde strance nahrazovat.
Tahle veta mne vede k temnemu podezreni, ze ceske znaky mate primo ve
zdrojaku JSP stranky, a tudiz se budete za chvili divit, proc jsou misto
nich jenom otazniky, kdyz specifikujete vystupni kodovani stranky.
To proto, ze vstupni kodovani souboru se zdrojem JSP stranky
nesouvisi s vystupnim kodovanim servletu, do ktereho se JSP stranka
prelozi.
Tim jsem minil, ze jsem nechtel nahrazovat retezec <%@ page
contentType="text/html;charset=UTF-8" %>
(Ve strance zadne texty nastesti nejsou.)
PavelR