2012-06-18 25 views
9

Tôi đã cố gắng giải quyết vấn đề này trong khoảng 7 giờ.Sự cố mã hóa ký tự với Tomcat

có mã hóa ký tự lạ đang diễn ra. Tôi đang sử dụng JSP (JSTL) và Struts với Tomat 6.

Tôi có mã hóa trang JSP của tôi như vậy:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 

Vấn đề là khi tôi cố gắng để vượt qua url sử dụng encodeURI như vậy:

<script type="text/javascript"> 
      $('#mailer_filter').change(function(){ 
      var val = $(this).val(); 
      console.log(val); 
      console.log(escape(val)); 
      console.log(encodeURI(val)); 
      location.href = 'mailList.a?' + encodeURI($(this).val()); 
      }); 
     </script> 

tham số trên hành động (cuối java) đi ra như: Gaz MÃ © tro

tuy nhiên ở đầu phía trước nó được hiển thị như: G az Métro

đó là cách chính xác (Gaz Métro) ...

bất kỳ ý tưởng nào tôi có thể làm về điều này ??

+2

Nơi nào bạn nhìn thấy giá trị trên đầu Java? Trong tệp nhật ký? Nếu vậy, có thể là trình soạn thảo mà bạn đang sử dụng để đọc tệp nhật ký không mong đợi UTF-8 ... – atk

Trả lời

1

Hãy thử thiết lập các tham số URIEncoding của kết nối tomcat của bạn (trong server.xml) sang UTF-8:

ví dụ .:

<Connector port="8080" maxHttpHeaderSize="8192" 
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
      enableLookups="false" redirectPort="8443" acceptCount="100" 
      connectionTimeout="20000" disableUploadTimeout="true" 
      URIEncoding="UTF-8"/> 
+0

cảm ơn đề xuất ... Tôi đã thử trước khi đăng, không giải quyết được vấn đề. – OakvilleWork

+0

Điều này không liên quan gì đến mã hóa đầu ra. Nó sẽ chỉ ảnh hưởng đến giá trị đọc từ một khách hàng, và chỉ cho các giá trị tham số GET. –

6

bạn đã làm theo các bước sau?

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

được sao chép dưới đây:

Sử dụng UTF-8 như mã hóa ký tự cho tất cả mọi thứ là một cược an toàn. Điều này sẽ làm việc cho khá nhiều mọi tình huống.

Để hoàn toàn chuyển sang sử dụng UTF-8, bạn cần phải thực hiện những thay đổi sau:

  1. Set URIEncoding = "UTF-8" trên trong của bạn server.xml. Tham khảo: Kết nối HTTP, Trình kết nối AJP.

  2. Sử dụng bộ lọc mã hóa ký tự với mã hóa mặc định thiết lập để UTF-8

  3. Thay đổi tất cả JSP của bạn để bao gồm tên charset trong contentType của họ. Ví dụ: sử dụng <%@page contentType="text/html; charset=UTF-8" %> cho các trang JSP thông thường và <jsp:directive.page contentType="text/html; charset=UTF-8" /> cho các trang có cú pháp XML (còn gọi là Tài liệu JSP).

  4. Thay đổi tất cả servlet của bạn để đặt loại nội dung cho phản hồi và bao gồm tên bộ ký tự trong loại nội dung là UTF-8.

    Sử dụng response.setContentType("text/html; charset=UTF-8") hoặc response.setCharacterEncoding("UTF-8").

  5. Thay đổi bất kỳ thư viện tạo nội dung nào bạn sử dụng (Velocity, Freemarker, v.v.) để sử dụng UTF-8 và chỉ định UTF-8 trong loại nội dung phản hồi mà chúng tạo ra.

  6. Tắt mọi van hoặc bộ lọc có thể đọc thông số yêu cầu trước bộ lọc mã hóa ký tự hoặc trang jsp có cơ hội đặt mã hóa thành UTF-8. Để biết thêm thông tin, xem http://www.mail-archive.com/[email protected]/msg21117.html.

+0

cảm ơn rất nhiều Paul ... Tôi đã thử tất cả những điều trên .. vẫn không có may mắn, tôi đã cố gắng tìm một giải pháp, thậm chí tôi đã thấy các giải pháp được đề xuất để mã hóa thành UTF-8 theo cách thủ công! Tôi không muốn sử dụng tùy chọn này mặc dù ... về cơ bản bài đăng này tương tự như vấn đề của tôi: http://stackoverflow.com/questions/6213377/handle-french-characters-s-java tuy nhiên những đề xuất đó không ' t làm việc. – OakvilleWork

+0

Tôi đã thấy ** 6 ** chịu trách nhiệm về điều này 'trong tự nhiên', sử dụng WebSphere Portal Server. Hãy thử và theo dõi từng yêu cầu, và nếu * bất cứ điều gì * cố gắng đọc tham số yêu cầu trước khi mã hóa chính xác được thiết lập, thì giá trị sẽ được đọc là ISO8859-1 (nếu tôi nhớ chính xác, điều này được chỉ rõ trong đặc tả servlet.). –

10

Do sau

1) HTML Mã

<meta contentType="text/html; charset="UTF-8"/> 

2) Trình duyệt Thiết cho IE View - Encoding - Unicode (UTF-8)

3) Tomcat Máy chủ server.xml - Trong thẻ Trình kết nối đã thêm thuộc tính "URIEncoding" là

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" URIEncoding="UTF-8"/> 

catalina.sh/catalina.bat - thêm sau

set JAVA_OPTS=--Xms256m -Xmx1024m -Xss268k -server -XX:MaxPermSize=256m -XX:-UseGCOverheadLimit -Djava.awt.headless=true -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 

set CATALINA_OPTS=-Dfile.encoding="UTF-8" 

4) kiểu MIME của phản ứng cần được "application/x-www-form-urlencoded"

+0

Tôi đã tìm kiếm một ngày để có được điều này sắp xếp ra ngoài. Tất cả làm việc tốt trên Jetty, nhưng khi triển khai để tomcat umlauts của tôi đã bị mất tích. Cảm ơn bạn! – Will

Các vấn đề liên quan