Stanie się tak tylko wtedy, gdy obie strony będą doskonale świadome różnic w kodowaniu znaków po każdej ze stron. Każdy znak, który nie jest objęty kodowaniem znaków używanym po drugiej stronie, zostanie zastąpiony znakiem zapytania ?
. W przeciwnym razie zobaczyłbyś Mojibake
.
W tym konkretnym przypadku tymi stronami są strona Java i strona bazy danych, ze sterownikiem JDBC jako mediatorem. Aby to naprawić, musisz powiedzieć sterownikowi JDBC, w jakim kodowaniu są te znaki. Możesz to zrobić, ustawiając useUnicode=true&characterEncoding=UTF-8
parametry w adresie URL połączenia JDBC.
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
Następnie, w zależności od tego, w jaki sposób przesyłasz parametry z klienta do serwera, prawdopodobnie musisz również poprawić kodowanie żądania. Biorąc pod uwagę fakt, że widzisz Mojibake po usunięciu request.setCharacterEncoding("UTF-8")
, używasz POST. Więc ta część jest w porządku.
W przypadku, gdy używasz GET do wysyłania parametrów, musisz skonfigurować kodowanie URI po stronie serwera. Nie wiadomo, z jakiego serwera korzystasz, ale w przypadku np. Tomcata jest to kwestia edycji <Connector>
wpis w /conf/server.xml
w następujący sposób:
<Connector ... URIEncoding="UTF-8">