Ini hanya akan terjadi ketika kedua belah pihak sangat menyadari perbedaan pengkodean karakter di masing-masing pihak. Setiap karakter yang tidak tercakup oleh pengkodean karakter yang digunakan di sisi lain akan diganti dengan tanda tanya ?
. Jika tidak, Anda akan melihat Mojibake
.
Dalam kasus khusus ini, sisi tersebut adalah sisi Java dan sisi database, dengan driver JDBC sebagai mediator. Untuk memperbaikinya, Anda perlu memberi tahu driver JDBC tentang pengkodean karakter tersebut. Anda dapat melakukannya dengan menyetel useUnicode=true&characterEncoding=UTF-8
parameter di URL koneksi JDBC.
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
Kemudian, tergantung pada bagaimana Anda mengirim parameter dari klien ke server, Anda mungkin juga perlu memperbaiki pengkodean permintaan. Mengingat fakta bahwa Anda melihat Mojibake saat Anda menghapus request.setCharacterEncoding("UTF-8")
, Anda menggunakan POST. Jadi bagian itu baik-baik saja.
Dalam hal ini, jika Anda menggunakan GET untuk mengirim parameter, Anda perlu mengonfigurasi penyandian URI di sisi server. Tidak jelas server apa yang Anda gunakan, tetapi dalam kasus misalnya Tomcat, ini masalah pengeditan <Connector>
entri di /conf/server.xml
sebagai berikut:
<Connector ... URIEncoding="UTF-8">