Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Tomas 08. 05. 2010, 14:49:43

Název: Java: HTTP POST v různých kodováních
Přispěvatel: Tomas 08. 05. 2010, 14:49:43
Zdravim,

potrebuji v Jave napsat kod ktery pres HTTP odesle POST. V postu jsou textove informace s diakritikou. Script ktery prijima formular miva kodovani UTF-8 nebo ISO 8859-2.
Uz mi dochazi napady jak telo onoho POSTu sestavit. Zkousel jsem vse, co jsem kde precetl.
Spravna cesta by podle me byla :
1) Prekodovat retezec z unicode na pozadovane kodovani :String fVal = new String(val.getBytes(), "ISO 8859-2");
2) Pouzit url encoder pro retezec fVal a dane kodovani
3) Vytvorit post

Nevite jak presne, postupovat pri kodovani POSTu, nebo nemate fungujici kus kodu?

Diky Tomas.
Název: Re: Java: HTTP POST v různých kodováních
Přispěvatel: Michal Krause 09. 05. 2010, 01:06:39
Tento kód

Kód: [Vybrat]
String fVal = new String(val.getBytes(), "ISO 8859-2");
nepřevádí kódování. Pouze vezme bajty z původního řetězce (ten je v Unicode, protože v Javě je každý řetězec interně v Unicode) a pak z nich vytvoří nový řetězec, přičemž konstruktoru je dáváno k uvěření, že bajty obsahují ISO-8859-2 znaky - což není pravda. Navíc, nový řetězec bude opět v Unicode, viz výše.

Proto je v ULEncoderu metoda encode(string) deprecated a místo ní se používá metoda encode(string, encoding). Pokud by se kódování řešilo nějak ve vlastní režii, je třeba pracovat s bajty v daném kódování, které se z řetězce získají pomocí metody getBytes(encoding).

Jinak pozor na to, že vstupní data v Unicode nemusí být převeditelná do ISO-8859-2 - mohou obsahovat znaky, které v tomto kódování nemají odpovídající reprezentaci.
Název: Re: Java: HTTP POST v různých kodováních
Přispěvatel: jj 09. 05. 2010, 11:43:41
mrkni na http://hc.apache.org/httpclient-3.x/tutorial.html