Java: HTTP POST v různých kodováních

Tomas

Java: HTTP POST v různých kodováních
« kdy: 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.
« Poslední změna: 08. 05. 2010, 20:16:10 od Petr Krčmář »


Re: Java: HTTP POST v různých kodováních
« Odpověď #1 kdy: 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.

jj