To se stane pouze tehdy, když si obě strany dokonale uvědomí rozdíly v kódování znaků na každé straně. Jakýkoli znak, který není pokryt kódováním znaků použitým na druhé straně, bude nahrazen otazníkem ?
. Jinak byste viděli Mojibake
.
V tomto konkrétním případě jsou těmito stranami strana Java a strana databáze, přičemž prostředníkem je ovladač JDBC. Chcete-li to vyřešit, musíte ovladači JDBC sdělit, v jakém kódování tyto znaky jsou. Můžete to provést nastavením useUnicode=true&characterEncoding=UTF-8
parametry v adrese URL připojení JDBC.
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
Potom, v závislosti na tom, jak posíláte parametry z klienta na server, budete možná muset také opravit kódování požadavku. Vzhledem k tomu, že po odstranění request.setCharacterEncoding("UTF-8")
vidíte Mojibake , používáte POST. Takže tato část je v pořádku.
Pro případ, že byste k odesílání parametrů používali GET, museli byste nakonfigurovat kódování URI na straně serveru. Není jasné, jaký server používáte, ale například v případě Tomcatu jde o úpravu <Connector>
záznam v /conf/server.xml
takto:
<Connector ... URIEncoding="UTF-8">