Hibernate i brak polskich znaków z formularza

0

Witam wszystkich.

Uczę się dopiero javy i mam do Was pytanie odnośnie polskich znaków, a raczej ich braku tekstach odebranych z formularza html. Formularz jest w widoku w pliku jsp, jednak jakiego kodowania bym nie ustawił to w kontrolerze zawsze dostaję jakieś krzaki. Jeśli w pliku jsp ustawię kodowanie na UTF-8 to w kontrolerze w POSTcie zamiast np. "ąąą" odbieram "ÄÄÄ" (każdy znak po dwa bajty), a jeśli ustawię iso 8859_2 to w efekcie w kontrolerze odbieram "±±±" (każdy znak w jednym bajcie - czyli formularz przysyła znak o kodzie 177 czyli ą, pod tym kodem w utf8 znajduje się właśnie ±). W przypadku servletu wystarczyło wymusić kodowanie przy odbiorze za pomocą

request.setCharacterEncoding("8859_2");

ale w Hibernate *request *do niczego nie jest używany więc wymuszenie zmiany kodowania w tym momencie nie daje efektu. Jak to rozwiązać? Jeśli polskie znaki wprowadzę w samym kodzie programu to do bazy dodają się poprawnie.

0

Java wewnętrznie przechowuje i przetwarza Stringi jako 2-bajtowy unikod. Szczerze mówiąc dziwię się, że musisz w ogóle cokolwiek z kodowaniem grzebać, bo powinno wystarczyć ustawienie w HTML-u odpowiedniego kodowania oraz wysłanie z requestem nagłówka HTTP Content-type ustawiającego identyczne kodowanie.

Dane do Javy trafiają jako tablica bajtów i przy jej konwersji na typ String zasadniczo trzeba podać wejściowe kodowanie. Może ustawiłeś kodowanie jeszcze w jakimś ekstra miejscu, przez co dane przychodzą do Ciebie jako UTF-8 z formularza, a Ty konwertujesz je tak, jakby były np. w ISO-8859-2.

0

No właśnie nic nie robiłem z kodowaniem - cały projekt jest pod linuxem, gdzie w sts-ie domyślnie jest utf-8, co jeszcze na wszelki wypadek sprawdziłem. W bazie również. W nagłówkach html-owych plików jsp kodowanie jest ustawiane na utf-8 chyba w trzech miejscach:

<%@ page language="java" contentType="text/html; charset=UTF-8"	pageEncoding="UTF-8"%>

oraz poniżej

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

jednak pomimo to w odebranych danych - krzaki zamiast polskich znaków. Widać że zmiana kodowania w html na 8859-2 daje efekt, ale nie mogę tego samego kodowania ustawić w kontrolerze, a więc w efekcie i tak krzaki. Nie mam już pomysłów... Ktoś, coś?

EDIT: Sprawa załatwiona przez ustawienie filtra. Szybkie zmiany w trzech plikach i po kłopocie. Rozwiązanie opisane tutaj: https://stackoverflow.com/a/40484064/8783698

1 użytkowników online, w tym zalogowanych: 0, gości: 1