/ / URL dekódovanie ä -> ã1⁄4 - java, url, utf-8, dekódovanie

URL dekódovanie ä -> ã1/4 - java, url, utf-8, dekódovanie

Mám problém, že dekódovanie z adresy URL spôsobuje niektoré závažné problémy. Adresa URL požiadavky obsahuje% C3% BC ako písmeno „ü“. Strana dekódovacieho servera by ju teraz mala dekódovať ako ü, ale robí to takto: ü

dekódovanie sa vykonáva takto:

decoded = URLDecoder.decode(value, "utf-8");

zatiaľ čo hodnota obsahuje "% C3% BC" a mala by byť dekódovanáteraz conatain "ü", ale to "tam, kde je problém. Čo sa tu pokazí?" Túto metódu používam vo viacerých aplikáciách a vo všetkých ostatných prípadoch funguje dobre ...

odpovede:

1 pre odpoveď č. 1

Nemám dosť reputácie, aby som sa k tomu vyjadrila, takže to budem musieť čo najviac priblížiť.

Ak "používate servlet a" hodnota "je niečo, čo ste dostali z volania getParameter () na servlet, potom už bolo dekódované (správne alebo nesprávne) kontajnerom servletu.

Podobne, ak je to časť cesty. Vaša nádoba servletu ju pravdepodobne dekódovala za predpokladu, že bajty s kódovaným percentom boli ISO-8859-1, čo je predvolené nastavenie pre Tomcat. Pozrite si dokument pre atribút URIEncoding elementu Connector v súbore server.xml servera Tomcat, ak je to to, čo používate, ktorý používate. Ak ho nastavíte na utf-8, Tomcat bude predpokladať, že bajty s kódovaným percentom predstavujú utf -8 text.


0 pre odpoveď č. 2

Pravdepodobne vypisujete hodnotu zle. najprv decoded.length() (predpokladá sa, že 1) poskytuje primeranú informáciu; mohol by si to tiež vyhodiť, Arrays.toString(decoded.toCharArray()).

V konzole IDE pod operačným systémom Windows môžete vidieť niečo také, ako je to v prípade jednobajtového kódovania ANSI systému Windows.

O zvyšok sa postarajte:

String s;
byte[] b;

s.getBytes()   ->   s.getBytes(StandardCharsets.UTF_8)
s.getBytes("Cp1252")   // Windows Latin-1

new String(b)  ->   new String(b, StandardCharsets.UTF_8)