Làm cách nào để UTF-8 hoạt động trong ứng dụng web Java?


367

Tôi cần để UTF-8 hoạt động trong ứng dụng web Java của mình (servlets + JSP, không sử dụng khung) để hỗ trợ äöåvv cho các văn bản và bảng chữ cái Cyrillic thông thường như ЦжФđối với các trường hợp đặc biệt.

Thiết lập của tôi là như sau:

  • Môi trường phát triển: Windows XP
  • Môi trường sản xuất: Debian

Cơ sở dữ liệu được sử dụng: MySQL 5.x

Người dùng chủ yếu sử dụng Firefox2 nhưng cũng có Opera 9.x, FF3, IE7 và Google Chrome được sử dụng để truy cập trang web.

Làm thế nào để đạt được điều này?


Câu trả lời:


552

Trả lời bản thân mình như Câu hỏi thường gặp của trang web này khuyến khích nó. Điều này làm việc cho tôi:

Hầu hết các ký tự không phải là một vấn đề vì bộ ký tự mặc định được sử dụng bởi các trình duyệt và tomcat / java cho webapps là latin1 tức là. ISO-8859-1 "hiểu" các ký tự đó.

Để UTF-8 hoạt động theo Java + Tomcat + Linux / Windows + Mysql cần có:

Định cấu hình máy chủ của Tomcat

Cần phải định cấu hình trình kết nối sử dụng UTF-8 để mã hóa các tham số url (yêu cầu GET):

<Connector port="8080" maxHttpHeaderSize="8192"
 maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 enableLookups="false" redirectPort="8443" acceptCount="100"
 connectionTimeout="20000" disableUploadTimeout="true" 
 compression="on" 
 compressionMinSize="128" 
 noCompressionUserAgents="gozilla, traviata" 
 compressableMimeType="text/html,text/xml,text/plain,text/css,text/ javascript,application/x-javascript,application/javascript"
 URIEncoding="UTF-8"
/>

Phần quan trọng là URIEncoding = "UTF-8" trong ví dụ trên. Việc kiểm dịch này mà Tomcat xử lý tất cả các tham số GET đến dưới dạng UTF-8 được mã hóa. Kết quả là, khi người dùng viết như sau vào thanh địa chỉ của trình duyệt:

 https://localhost:8443/ID/Users?action=search&name=*ж*

ký tự được xử lý dưới dạng UTF-8 và được mã hóa (thường là bởi trình duyệt trước khi đến máy chủ) dưới dạng % D0% B6 .

Yêu cầu POST không bị ảnh hưởng bởi điều này.

Bộ ký tự

Sau đó, đã đến lúc buộc ứng dụng web java xử lý tất cả các yêu cầu và phản hồi dưới dạng UTF-8 được mã hóa. Điều này yêu cầu chúng tôi xác định bộ lọc bộ ký tự như sau:

package fi.foo.filters;

import javax.servlet.*;
import java.io.IOException;

public class CharsetFilter implements Filter {

    private String encoding;

    public void init(FilterConfig config) throws ServletException {
        encoding = config.getInitParameter("requestEncoding");
        if (encoding == null) encoding = "UTF-8";
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
            throws IOException, ServletException {
        // Respect the client-specified character encoding
        // (see HTTP specification section 3.4.1)
        if (null == request.getCharacterEncoding()) {
            request.setCharacterEncoding(encoding);
        }

        // Set the default response content type and encoding
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");

        next.doFilter(request, response);
    }

    public void destroy() {
    }
}

Bộ lọc này đảm bảo rằng nếu trình duyệt chưa đặt mã hóa được sử dụng trong yêu cầu, thì nó sẽ được đặt thành UTF-8.

Một điều khác được thực hiện bởi bộ lọc này là đặt mã hóa phản hồi mặc định tức là. mã hóa trong đó html / trả về bất cứ thứ gì. Cách khác là đặt mã hóa đáp ứng, vv trong mỗi bộ điều khiển của ứng dụng.

Bộ lọc này phải được thêm vào tệp web.xml hoặc bộ mô tả triển khai của ứng dụng web:

 <!--CharsetFilter start--> 

  <filter>
    <filter-name>CharsetFilter</filter-name>
    <filter-class>fi.foo.filters.CharsetFilter</filter-class>
      <init-param>
        <param-name>requestEncoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
  </filter>

  <filter-mapping>
    <filter-name>CharsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

Các hướng dẫn để tạo bộ lọc này được tìm thấy tại wiki tomcat ( http://wiki.apache.org/tomcat/Tomcat/UTF-8 )

Mã hóa trang JSP

Trong tệp web của bạn , hãy thêm vào như sau:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

Ngoài ra, tất cả các trang JSP của ứng dụng web sẽ cần phải có các mục sau ở đầu chúng:

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

Nếu một kiểu bố trí nào đó với các đoạn JSP khác nhau được sử dụng, thì điều này là cần thiết trong tất cả chúng.

Thẻ HTML-meta

Mã hóa trang JSP báo cho JVM xử lý các ký tự trong trang JSP theo mã hóa chính xác. Sau đó, đã đến lúc nói với trình duyệt trong đó mã hóa trang html là:

Điều này được thực hiện với phần sau ở đầu mỗi trang xhtml do webapp tạo ra:

   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
   <head>
   <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
   ...

Kết nối JDBC

Khi sử dụng db, phải xác định rằng kết nối sử dụng mã hóa UTF-8. Này được thực hiện trong context.xml hoặc bất cứ nơi nào kết nối JDBC là defiend như sau:

      <Resource name="jdbc/AppDB" 
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="20" maxIdle="10" maxWait="10000"
        username="foo"
        password="bar"
        driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/      ID_development?useEncoding=true&amp;characterEncoding=UTF-8"
    />

Cơ sở dữ liệu và bảng MySQL

Cơ sở dữ liệu được sử dụng phải sử dụng mã hóa UTF-8. Điều này đạt được bằng cách tạo cơ sở dữ liệu với các mục sau:

   CREATE DATABASE `ID_development` 
   /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */;

Sau đó, tất cả các bảng cũng cần có trong UTF-8:

   CREATE TABLE  `Users` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(30) collate utf8_swedish_ci default NULL
    PRIMARY KEY  (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci ROW_FORMAT=DYNAMIC;

Phần quan trọng là CHARSET = utf8 .

Cấu hình máy chủ MySQL

MySQL serveri cũng phải được cấu hình. Thông thường, điều này được thực hiện trong Windows bằng cách sửa đổi my.ini -file và trong Linux bằng cách định cấu hình my.cnf -file. Trong các tệp đó, cần xác định rằng tất cả các máy khách được kết nối với máy chủ sử dụng utf8 làm bộ ký tự mặc định và bộ ký tự mặc định được sử dụng bởi máy chủ cũng là utf8.

   [client]
   port=3306
   default-character-set=utf8

   [mysql]
   default-character-set=utf8

Các thủ tục và chức năng của Mysql

Những điều này cũng cần phải có bộ ký tự được xác định. Ví dụ:

   DELIMITER $$

   DROP FUNCTION IF EXISTS `pathToNode` $$
   CREATE FUNCTION `pathToNode` (ryhma_id INT) RETURNS TEXT CHARACTER SET utf8
   READS SQL DATA
   BEGIN

    DECLARE path VARCHAR(255) CHARACTER SET utf8;

   SET path = NULL;

   ...

   RETURN path;

   END $$

   DELIMITER ;

NHẬN yêu cầu: latin1 và UTF-8

Nếu và khi được xác định trong tệp tin serverDB của tomcat, các tham số yêu cầu GET được mã hóa trong UTF-8, các yêu cầu GET sau đây được xử lý đúng cách:

   https://localhost:8443/ID/Users?action=search&name=Petteri
   https://localhost:8443/ID/Users?action=search&name=ж

Vì các ký tự ASCII được mã hóa theo cùng một cách cả với latin1 và UTF-8, chuỗi "Petteri" được xử lý chính xác.

Nhân vật Cyrillic ж hoàn toàn không được hiểu theo tiếng Latin1. Vì Tomcat được hướng dẫn xử lý các tham số yêu cầu dưới dạng UTF-8, nó mã hóa ký tự đó chính xác là % D0% B6 .

Nếu và khi các trình duyệt được hướng dẫn đọc các trang ở dạng mã hóa UTF-8 (với tiêu đề yêu cầu và thẻ meta html), thì ít nhất Firefox 2/3 và các trình duyệt khác trong giai đoạn này đều tự mã hóa ký tự là % D0% B6 .

Kết quả cuối cùng là tất cả người dùng có tên "Petteri" đều được tìm thấy và tất cả người dùng có tên "ж" đều được tìm thấy.

Nhưng còn äåö thì sao?

Đặc tả HTTP xác định rằng các URL mặc định được mã hóa thành latin1. Điều này dẫn đến firefox2, firefox3, vv mã hóa như sau

    https://localhost:8443/ID/Users?action=search&name=*Päivi*

trong phiên bản được mã hóa

    https://localhost:8443/ID/Users?action=search&name=*P%E4ivi*

Trong latin1, ký tự ä được mã hóa thành % E4 . Mặc dù trang / yêu cầu / mọi thứ được xác định để sử dụng UTF-8 . Phiên bản được mã hóa UTF-8 của ä là % C3% A4

Kết quả của việc này là ứng dụng web không thể xử lý chính xác các tham số yêu cầu từ các yêu cầu GET vì một số ký tự được mã hóa bằng latin1 và các ký tự khác trong UTF-8. Lưu ý: Các yêu cầu POST hoạt động khi trình duyệt mã hóa tất cả các tham số yêu cầu từ các biểu mẫu hoàn toàn trong UTF-8 nếu trang được xác định là UTF-8

Thứ để đọc

Một lời cảm ơn rất lớn cho các nhà văn sau đây đã đưa ra câu trả lời cho vấn đề của tôi:

  • http://tagunov.tripod.com/i18n/i18n.html
  • http://wiki.apache.org/tomcat/Tomcat/UTF-8
  • http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/
  • http://dev.mysql.com/doc/refman/5.0/en/charset-syntax.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-tomcat-jsp-etc.html
  • http://cagan327.blogspot.com/2006/05/utf-8-encoding-fix-for-mysql-tomcat.html
  • http://jeppesn.dk/utf-8.html
  • http://www.nabble.com/request-parameter-mishandle-utf-8-encoding-td18720039.html
  • http://www.utoronto.ca/webdocs/HTMLdocs/NewHTML/iso_table.html
  • http://www.utf8-chartable.de/

Lưu ý quan trọng

hỗ trợ Mặt phẳng đa ngôn ngữ cơ bản sử dụng các ký tự UTF-8 3 byte. Nếu bạn cần đi ra ngoài điều đó (một số bảng chữ cái nhất định cần nhiều hơn 3 byte UTF-8), thì bạn cần phải sử dụng hương vị của VARBINARYloại cột hoặc sử dụng bộ utf8mb4ký tự (yêu cầu MySQL 5.5.3 trở lên). Chỉ cần lưu ý rằng việc sử dụng bộ utf8ký tự trong MySQL sẽ không hoạt động 100%.

Tomcat với Apache

Một điều nữa Nếu bạn đang sử dụng trình kết nối Apache + Tomcat + mod_JK thì bạn cũng cần thực hiện các thay đổi sau:

  1. Thêm URIEncoding = "UTF-8" vào tệp tomcat server.xml cho trình kết nối 8009, nó được sử dụng bởi trình kết nối mod_JK. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
  2. Goto thư mục apache của bạn tức là /etc/httpd/confvà thêm AddDefaultCharset utf-8vào httpd.conf file. Lưu ý: Trước tiên hãy kiểm tra xem nó có tồn tại hay không. Nếu tồn tại bạn có thể cập nhật nó với dòng này. Bạn có thể thêm dòng này ở dưới cùng.

Các bước này cũng hoạt động với Struts / gạch và cơ sở dữ liệu postgres.
kosoant

17
Hai nhận xét: 1) trong thẻ meta HMTL bạn đã bao gồm khai báo xml. Xóa nó đi, nó sẽ chỉ kích hoạt các trình duyệt ở chế độ quirks, bạn không muốn có nó. Ngoài ra, các thẻ meta HTML trên thực tế đã được thực hiện hoàn toàn bởi JSP pageEncoding, do đó bạn thậm chí có thể bỏ nó đi. 2) trong cơ sở dữ liệu MySQL và các bảng bạn đã sử dụng utf8_swedish_si, điều này nên có utf8_unicode_ci. Bạn thậm chí có thể rời khỏi đối chiếu đi, chỉ CHARACTER SET utf8là đủ.
BalusC

Cả hai tài liệu tôi đã tham khảo về thẻ meta HTML và chế độ quirks (ví dụ: ericmeyeroncss.com/bonus/render-mode.html , en.wikipedia.org/wiki/Quirks_mode ) chỉ ra rằng sự hiện diện của <meta http-Equiv = 'Nội dung -Type 'có bất kỳ tác động nào đến chế độ kết xuất.
Marcel Stor

Là một lưu ý phụ thú vị, bạn cũng có thể muốn biết rằng nếu bạn có người nghe truy cập tham số yêu cầu, bạn sẽ cần thêm trình lắng nghe đặt bộ ký tự thay vì bộ lọc vì trình nghe được thực thi trước bộ lọc. Tôi đã làm theo tất cả các bước và nó vẫn không hoạt động vì điều này. Chỉ cần nghĩ rằng tôi sẽ chuyển thông tin này, trong trường hợp bất cứ ai khác có vấn đề tương tự.
nghiệm123

3
## Tomcat với Apache ## Một điều nữa Nếu bạn đang sử dụng trình kết nối Apache + Tomcat + mod_JK thì bạn cũng cần thực hiện các thay đổi sau: 1. Thêm URIEncoding = "UTF-8" vào tệp tomcat server.xml cho trình kết nối 8009, nó được sử dụng bởi trình kết nối mod_JK. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/> 2. Goto thư mục apache của bạn tức là /etc/httpd/confvà thêm AddDefaultCharset utf-8vào tệp 'httpd.conf'. Lưu ý: đầu tiên kiểm tra xem nó có tồn tại hay không. Nếu tồn tại bạn có thể cập nhật nó với dòng này. Bạn có thể thêm dòng này ở dưới cùng.
Vijay Shegokar

14

Tôi nghĩ rằng bạn đã tóm tắt nó khá tốt trong câu trả lời của riêng bạn.

Trong quá trình UTF-8-ing (?) Từ đầu đến cuối, bạn cũng có thể muốn đảm bảo rằng chính java đang sử dụng UTF-8. Sử dụng -Dfile.encoding = utf-8 làm tham số cho JVM (có thể được cấu hình trong catalina.bat).


Điều này giúp tôi, tôi đã làm mọi thứ được đề cập nhưng mã hóa JVM là windows-1250 ngay khi tôi đổi thành UTF-8, nó hoạt động hoàn hảo.
mã hóa_idiot

2
Bạn thêm nó vào đâu trong tập tin Catalina.bat?

11

Để thêm vào câu trả lời của kosoant , nếu bạn đang sử dụng Spring, thay vì viết bộ lọc Servlet của riêng bạn, bạn có thể sử dụng lớp org.springframework.web.filter.CharacterEncodingFiltermà họ cung cấp, định cấu hình nó như sau trong tệp webDB của bạn:

 <filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>FALSE</param-value>
    </init-param>
 </filter>
 <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

1
Bộ lọc này phải là bộ lọc đầu tiên trong web.xml
olyanren

2

Tôi cũng muốn thêm từ đây phần này đã giải quyết vấn đề utf của tôi:

runtime.encoding=<encoding>

1

Đây là mã hóa Hy Lạp trong các bảng MySql khi chúng tôi muốn truy cập chúng bằng Java:

Sử dụng thiết lập kết nối sau trong nhóm kết nối JBoss của bạn (mysql-ds.xml)

<connection-url>jdbc:mysql://192.168.10.123:3308/mydatabase</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>nts</user-name>
<password>xaxaxa!</password>
<connection-property name="useUnicode">true</connection-property>
<connection-property name="characterEncoding">greek</connection-property>

Nếu bạn không muốn đặt cái này vào nhóm kết nối JNDI, bạn có thể định cấu hình nó dưới dạng url JDBC giống như dòng tiếp theo minh họa:

jdbc:mysql://192.168.10.123:3308/mydatabase?characterEncoding=greek

Đối với tôi và Nick, vì vậy chúng tôi không bao giờ quên nó và lãng phí thời gian nữa .....


5
Tôi vẫn thích UTF-8 hơn Hy Lạp (và chuyển đổi dữ liệu Hy Lạp hiện tại của bạn thành UTF-8) để ứng dụng của bạn sẵn sàng thống trị thế giới.
BalusC

1

Câu trả lời chi tiết đẹp. chỉ muốn thêm một điều nữa chắc chắn sẽ giúp người khác thấy mã hóa UTF-8 trên các URL đang hoạt động.

Thực hiện theo các bước bên dưới để bật mã hóa UTF-8 trên URL trong firefox.

  1. gõ "about: config" vào thanh địa chỉ.

  2. Sử dụng loại đầu vào bộ lọc để tìm kiếm thuộc tính "network.st Chuẩn-url.encode-query-utf8".

  3. thuộc tính trên sẽ là false theo mặc định, biến nó thành TRUE.
  4. khởi động lại trình duyệt.

Mã hóa UTF-8 trên các URL hoạt động theo mặc định trong IE6 / 7/8 và chrome.


1

Những phản hồi trước đây không hoạt động với vấn đề của tôi. Nó chỉ được sản xuất, với tomcat và apache mod_proxy_ajp. Đăng cơ thể mất không ascii chars bằng? Vấn đề cuối cùng là với JVM defaultCharset (US-ASCII trong một bản in mặc định: Charset dfset = Charset.defaultCharset ();), vì vậy, giải pháp đã chạy máy chủ tomcat với một bộ sửa đổi để chạy JVM với UTF-8 như bộ ký tự mặc định:

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8" 

(thêm dòng này vào catalina.sh và khởi động lại dịch vụ tomcat)

Có lẽ bạn cũng phải thay đổi biến hệ thống linux (chỉnh sửa ~ / .bashrc và ~ / .profile để thay đổi vĩnh viễn, xem https://perlgeek.de/en/article/set-up-a-clean-utf8-en môi trường )

xuất LC_ALL = en_US.UTF-8
xuất LANG = en_US.UTF-8

xuất LANGUAGE = en_US.UTF-8


0

Tôi có một vấn đề tương tự, nhưng, trong tên tệp của một tệp tôi đang nén với dấu phẩy apache. Vì vậy, tôi đã giải quyết nó bằng lệnh này:

convmv --notest -f cp1252 -t utf8 * -r

Nó hoạt động rất tốt cho tôi. Hy vọng nó sẽ giúp được ai;)


0

Đối với trường hợp hiển thị ký tự Unicode từ các gói thông báo, tôi không cần phải áp dụng phần "Mã hóa trang JSP" để hiển thị Unicode trên trang jsp của mình. Tất cả tôi cần là phần "CharsetFilter".


0

Một điểm khác chưa được đề cập liên quan đến Java Servlets làm việc với Ajax. Tôi có các tình huống trong đó một trang web đang chọn văn bản utf-8 từ người dùng gửi tệp này đến tệp JavaScript bao gồm nó trong URI được gửi tới Servlet. Servlet truy vấn cơ sở dữ liệu, ghi lại kết quả và trả về dưới dạng XML cho tệp JavaScript định dạng nó và chèn phản hồi được định dạng vào trang web gốc.

Trong một ứng dụng web, tôi đã làm theo hướng dẫn của một cuốn sách Ajax ban đầu để gói JavaScript trong việc xây dựng URI. Ví dụ trong cuốn sách đã sử dụng phương thức esc () mà tôi phát hiện ra (cách khó) là sai. Đối với utf-8, bạn phải sử dụng encodeURIComponent ().

Rất ít người dường như tung ra Ajax của riêng họ những ngày này, nhưng tôi nghĩ tôi cũng có thể thêm điều này.


0

Trong khoảng CharsetFilter được đề cập trong câu trả lời @kosoant ....

Có một bản dựng Filtertrong tomcat web.xml(nằm ở conf/web.xml). Bộ lọc được đặt tên setCharacterEncodingFiltervà được nhận xét theo mặc định. Bạn có thể bỏ ghi chú này (Xin nhớ bỏ ghi chúfilter-mapping quá)

Cũng có không cần phải thiết lập jsp-configtrong của bạn web.xml(Tôi có kiểm tra nó cho Tomcat 7+)


0

Đôi khi bạn có thể giải quyết vấn đề thông qua trình hướng dẫn Quản trị viên MySQL. Trong

Biến khởi động> Nâng cao>

và đặt Def. char Set: utf8

Có lẽ cấu hình này cần khởi động lại MySQL.


0

Đối mặt với vấn đề tương tự trên Spring MVC 5 + Tomcat 9 + JSP.
Sau khi nghiên cứu lâu dài, đến một giải pháp thanh lịch ( không cần bộ lọckhông có nhu cầu thay đổi trong Tomcat server.xml (bắt đầu từ phiên bản 8.0.0-RC3))

  1. Trong triển khai WebMvcConfigker, đặt mã hóa mặc định cho messageSource (để đọc dữ liệu từ các tệp nguồn tin nhắn trong mã hóa UTF-8.

    @Configuration
    @EnableWebMvc
    @ComponentScan("{package.with.components}")
    public class WebApplicationContextConfig implements WebMvcConfigurer {
    
        @Bean
        public MessageSource messageSource() {
            final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    
            messageSource.setBasenames("messages");
            messageSource.setDefaultEncoding("UTF-8");
    
            return messageSource;
        }
    
        /* other beans and methods */
    
    }
  2. Trong triển khai DispatcherServletInitializer @Override phương thức onStartup và đặt mã hóa ký tự yêu cầu và tài nguyên trong đó.

    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        public void onStartup(final ServletContext servletContext) throws ServletException {
    
            // https://wiki.apache.org/tomcat/FAQ/CharacterEncoding
            servletContext.setRequestCharacterEncoding("UTF-8");
            servletContext.setResponseCharacterEncoding("UTF-8");
    
            super.onStartup(servletContext);
        }
    
        /* servlet mappings, root and web application configs, other methods */
    
    }
  3. Lưu tất cả nguồn tin nhắn và xem các tập tin trong mã hóa UTF-8.

  4. Thêm <% @ page contentType = "text / html; charset = UTF-8"%> hoặc <% @ page pageEncoding = "UTF-8"%> trong mỗi tệp * .jsp hoặc thêm mô tả jsp-config vào web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
     id="WebApp_ID" version="3.0">
        <display-name>AppName</display-name>
    
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <page-encoding>UTF-8</page-encoding>
            </jsp-property-group>
        </jsp-config>
    </web-app>

-1

Trong trường hợp bạn đã chỉ định trong nhóm kết nối (mysql-ds.xml), trong mã Java của bạn, bạn có thể mở kết nối như sau:

DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://192.168.1.12:3308/mydb?characterEncoding=greek",
    "Myuser", "mypass");
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.