2013-05-13 15 views
27

Widziałem wiele pytań, takich jak moje, ale żadna odpowiedź nie działa ... Oto, co się dzieje: Chcę uzyskać moje parametry z żądania (znaki z akcentami), ale to nie działa . Próbowałem użytkownika request.setCharacterEncoding("UTF-8"), ale to też nie działało.HttpServletRequest UTF-8 Kodowanie

Wiem, że URLDecoder.decode(request.getQueryString(), "UTF-8") zwraca mi znaki uprawnień, ale request.getParameterValues() nie działa! Czy ktoś ma pomysł?

Dziękuję

Odpowiedz

34

Pawła sugestia wydaje się, że najlepszym kierunkiem działań, ale jeśli masz zamiar obejść, nie trzeba URLEncoder lub URLDecoder na wszystkich:

String item = request.getParameter("param"); 

byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1); 
item = new String(bytes, StandardCharsets.UTF_8); 

// Java 6: 
// byte[] bytes = item.getBytes("ISO-8859-1"); 
// item = new String(bytes, "UTF-8"); 

Aktualizacja: Ponieważ jest zdobywając dużo głosów, chcę podkreślić, że BalusC mówi, że to zdecydowanie nie jest rozwiązanie; w najlepszym przypadku jest to obejście. Ludzie nie powinni tego robić.

Nie wiem dokładnie, co spowodowało pierwotny problem, ale podejrzewam, że adres URL był już zakodowany w UTF-8, a następnie został ponownie zakodowany w UTF-8.

+9

Dla wszystkich przyszłych czytelników, proszę zauważyć, że jest to obejście, a nie rozwiązanie. W rzeczywistości bardzo okropny, który sprawia, że ​​twoja aplikacja jest krucha i niepoprawna. – BalusC

+0

Masz rację, dzięki za wskazanie tego! Pomógł też w moim problemie – Broccoli

15

Jeśli używasz Apache Tomcat, request.setCharacterEncoding("UTF-8") działa tylko z POST życzenie.

Dla zapytania GET należy dodać URIEncoding="UTF-8" na swoim <Connector> w server.xml.

Zobacz więcej w FAQ/CharacterEncoding - Tomcat Wiki.

+0

Co z serwerem WebSphere Application Server? Czy mogę wiedzieć, że plik server.xml znajduje się w jakim folderze w WAS? Szukam całości, okazało się, że jest dużo server.xml. –

+0

W środowisku WebSphere należy użyć właściwości systemowej 'client.encoding.override'. Zobacz https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/rzatz/51/admin/help/trun_svr_utf.html –

5

Cóż, znalazłem sposób, aby rozwiązać mój problem, myślę, że nie jest lepszym rozwiązaniem, ale to nie działa ..

String item = request.getParameterValues("param"); // Hélène 
    item = URLEncoder.encode(model.getNameItem(), "ISO-8859-1"); // H%C3%A9l%C3%A8ne 
    item = URLDecoder.decode(item, "UTF-8"); // and finally : Hélène 

Jeśli to może pomóc nikomu, cieszę się pomóc:)

PS: Paul, nie odpowiedziałem wcześniej, ale już to zrobiłem. Mimo to dzięki za pomoc.

+0

Od odpowiedzi Pawła, czy mogę wiedzieć, że plik server.xml znajduje się w jakim folderze w WAS? Szukam całości, okazało się, że jest dużo server.xml. –

+0

Pracowałem dla mnie, thx. Nie mogłem zmodyfikować serwera Tomcat, więc jest to idealne :) –