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ď č. 1Nemá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)