Portál AbcLinuxu, 13. května 2025 22:45
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 :
Nevite jak presne, postupovat pri kodovani POSTu, nebo nemate fungujici kus kodu?
Diky Tomas.String
, ale byte[]
. Takže v prvním řádku byste měl volat jen val.getBytes("ISO 8859-2")
. Mimochodem, metoda getBytes()
a konstruktor new String()
bez určeného kódování použijí kódování platformy (tj. na Windows kódování pro danou jazykovou mutaci Windows, na unixech kódování nastavené v locale), a pokud to někde v kódu uvidíte nebo použijete, je to skoro vždy špatně.
Diky za pomoc.
Sam jsem citil, ze mit to cele ve stringu nebude spravne.
Co se tyce HttpClient, ten jsem pouzival bohuzel ani v nem to kodovani nedokazu zprovoznit.
V hlavicce ze serveru mi prijde nasledujici :
V tele HTML dokumentu je kodovani ISO 8859-2.
Rozumim tomu spravne, ze POST na server ma mit telo v kodovani ISO 8859-2?
Jak k tomu dospet?
URL encode necha normalni znaky jako a..z A..Z napokoji. Vyescapuje specialni znaky jako mezery, enter, zavinac ... . Navic vezme specialni znaky(diakriticke) a ty zakoduje podle tabulky pro zvolene kodovani.
Kdyz se divam, co tam posila FF, tak je obsah pekne zakodovany %40 @ %26 ř atp. Z Javy se mi cela diakritika zakoduje znak '?'
Napada nekoho neco?
UrlEncodedFormEntity
předat správné kódování.
Řetězec tvořící tělo POSTu musíte podle mne poskládat z jednotlivých částí, URLEncoder.encode() by vám zakódovalo i oddělovače jednotlivých parametrů (&). Ve výsledném řetězci by pak měly být jen znaky z ASCII, takže do výstupu byste měl vypsat os.write(telo.getBytes("ASCII");
(ale pokud tam máte správně jen ASCII znaky, nebud v tom rozdíl).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.