Tôi đang phát triển một ứng dụng web đơn giản bằng cách sử dụng java/jsp/tomcat/mysql, và vấn đề nhất nằm trên bảng mã ký tự vì tôi cần xử lý mã hóa UTF-8 thay vì 8851 mặc địnhjava tomcat utf-8 mã hóa vấn đề
Trước tiên tôi muốn mô tả cấu trúc chương trình của mình. Tôi đang sử dụng một Servlet gọi là Controller.java để xử lý tất cả các yêu cầu. Vì vậy, trong web.xml, tôi có một bộ điều khiển servlet nhận tất cả yêu cầu từ * .do.
Sau đó, Bộ điều khiển này sẽ gửi yêu cầu dựa trên URL được yêu cầu, ví dụ, nếu máy khách yêu cầu register.do, Controller sẽ gửi yêu cầu đến Register.java.
Và trong Register.java, có một phương pháp mà có yêu cầu như tham số, cụ thể là:
public String perform(HttpServletRequest request) {
do something with the request...
}
Vì vậy, vấn đề là nếu tôi muốn in một cái gì đó trong UTF-8 trong phương pháp này, nó sẽ cung cấp các ký tự ngẫu nhiên. Ví dụ, tôi có một Enum lưu trữ một số hằng số, một trong những thuộc tính mà Enum có là tên của nó trong tiếng Trung Phồn thể. Nếu tôi in nó trong
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Điều này được in chính xác bằng tiếng Trung. Tuy nhiên, nếu tôi đặt mã chính xác bên trong phương pháp đối phó với HttpServletRequest:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Chúng được in như ký tự ngẫu nhiên, nhưng tôi có thể nhìn thấy từ cửa sổ gỡ lỗi (eclipse) mà các biến được giữ ký tự đúng của Trung Quốc.
Vì vậy, tình huống tương tự xảy ra khi tôi muốn lưu trữ giá trị từ request.getParameter(). Trong cửa sổ gỡ lỗi, tôi có thể thấy biến đang giữ các ký tự chính xác, nhưng tôi in ra hoặc cố gắng lưu nó trong cơ sở dữ liệu, nó là ký tự ngẫu nhiên.
Tôi không biết tại sao hành vi này hoạt động như thế này và điều này ngăn tôi đọc các giá trị biểu mẫu đã gửi và lưu trữ chúng vào cơ sở dữ liệu. Ai đó có thể đưa ra một số gợi ý về điều này?
Xin cảm ơn.
Tôi không thể hiểu cho dù bạn đang lo lắng về đầu ra hỏng trên giao diện điều khiển và các bản ghi của máy chủ, * hoặc * hỏng sản lượng trong phản hồi kết quả cho trình duyệt. Bạn có thể làm rõ? – erickson
Giá trị của 'System.getProperty (" file.encoding ")' là gì? – erickson
Điều tôi lo lắng là trong cửa sổ gỡ lỗi tôi có thể thấy mã hóa chính xác, nhưng khi tôi chuyển biến cho đối tượng truy cập cơ sở dữ liệu của tôi và lưu nó vào db, nó sẽ trở thành ký tự ngẫu nhiên. Vì vậy, sau đó tôi thấy rằng trong phương pháp xử lý các yêu cầu, thậm chí chỉ cần in ra giá trị Enf UTF-8 không hoạt động. –