Това ще се случи само когато и двете страни са напълно наясно с разликите в кодирането на знаци във всяка страна. Всеки знак, който не е покрит от кодирането на знаци, използвано от другата страна, ще бъде заменен с въпросителен знак ?
. В противен случай щяхте да видите Mojibake
.
В този конкретен случай тези страни са страната на Java и страната на базата данни, като JDBC драйверът е посредник. За да коригирате това, трябва да кажете на драйвера на JDBC в какво кодиране са тези знаци. Можете да направите това, като зададете useUnicode=true&characterEncoding=UTF-8
параметри в URL адреса на JDBC връзката.
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
След това, в зависимост от това как изпращате параметрите от клиента към сървъра, вероятно ще трябва да коригирате кодирането на заявката. Предвид факта, че виждате Mojibake, когато премахнете request.setCharacterEncoding("UTF-8")
, използвате POST. Така че тази част е наред.
В случай, че ако използвате GET за изпращане на параметрите, ще трябва да конфигурирате URI кодиране от страна на сървъра. Не е ясно какъв сървър използвате, но в случай на Tomcat например е въпрос на редактиране на <Connector>
запис в /conf/server.xml
както следва:
<Connector ... URIEncoding="UTF-8">