Điều này sẽ chỉ xảy ra khi cả hai bên hoàn toàn nhận thức được sự khác biệt về mã hóa ký tự ở mỗi bên. Bất kỳ ký tự nào không nằm trong bảng mã ký tự được sử dụng ở phía bên kia sẽ được thay thế bằng dấu chấm hỏi ?
. Nếu không, bạn sẽ thấy Mojibake
.
Trong trường hợp cụ thể này, các phía đó là phía Java và phía cơ sở dữ liệu, với trình điều khiển JDBC làm trung gian. Để khắc phục điều này, bạn cần cho trình điều khiển JDBC biết mã hóa các ký tự đó. Bạn có thể thực hiện việc đó bằng cách đặt useUnicode=true&characterEncoding=UTF-8
trong URL kết nối JDBC.
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8
Sau đó, tùy thuộc vào cách bạn đang gửi các tham số từ máy khách đến máy chủ, bạn cũng có thể cần sửa mã hóa yêu cầu. Thực tế là bạn đang nhìn thấy Mojibake khi xóa request.setCharacterEncoding("UTF-8")
, bạn đang sử dụng POST. Vì vậy, phần đó là tốt.
Đối với trường hợp, nếu bạn đang sử dụng GET để gửi các tham số, bạn sẽ cần phải định cấu hình mã hóa URI ở phía máy chủ. Không rõ bạn đang sử dụng máy chủ nào, nhưng trong trường hợp chẳng hạn như Tomcat, vấn đề là chỉnh sửa <Connector>
mục nhập trong /conf/server.xml
như sau:
<Connector ... URIEncoding="UTF-8">