1. 序章

UTF-8は、Webアプリケーションで使用される最も一般的な文字エンコードです。 中国語、韓国語、日本語など、現在世界で話されているすべての言語をサポートしています。

この記事では、TomcatでUTF-8を確保するために必要なすべての構成を示します。

2. コネクタ構成

コネクタは、特定のポートで接続をリッスンします。 すべてのコネクタがUTF-8を使用してリクエストをエンコードしていることを確認する必要があります。

パラメータURIEncoding=” UTF-8”TOMCAT_ROOT / conf /server.xmlのすべてのコネクタに追加しましょう。

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

<Connector 
  URIEncoding="UTF-8" 
  port="8009" 
  redirectPort="8443" 
  protocol="AJP/1.3"/>

3. 文字セットフィルター

コネクタを構成したら、WebアプリケーションにUTF-8のすべての要求と応答を処理させるようにします。

CharacterSetFilterという名前のクラスを定義しましょう。

public class CharacterSetFilter implements Filter {

    // ...

    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain next) throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html; charset=UTF-8");
        response.setCharacterEncoding("UTF-8");
        next.doFilter(request, response);
    }

    // ...
}

すべてのリクエストとレスポンスに適用されるように、アプリケーションのweb.xmlにフィルターを追加する必要があります。

<filter>
    <filter-name>CharacterSetFilter</filter-name>
    <filter-class>com.baeldung.CharacterSetFilter</filter-class>
</filter>

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

4. サーバーページのエンコーディング

構成する必要のあるWebアプリケーションの他の部分は、Javaサーバーページです。

サーバーページでUTF-8を確保する最善の方法は、各JSPページの上部に次のタグを追加することです:

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

5. HTMLページのエンコーディング

サーバーページエンコーディングはJVMにページ文字の処理方法を指示しますが、HTMLページエンコーディングはブラウザにページ文字の処理方法を指示します。

これを追加する必要がありますのタグすべてのHTMLページのセクション:

<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />

6. MySQLサーバーの構成

これでTomcatが構成されたので、データベースを構成します。

MySQLサーバーが使用されていることを前提としています。 構成ファイルの名前は、Windowsでは my.ini 、Linuxではmy.cnfです。

構成ファイルを見つけ、これらのパラメーターを検索し、それに応じて編集する必要があります。

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

変更を有効にするには、MySQLサーバーを再起動する必要があります。

7. MySQLデータベース構成

MySQLサーバーの文字セット構成は、新しいデータベースにのみ適用されます。 古いものを手動で移行する必要があります。 これは、いくつかのコマンドを使用して簡単に実現できます。

データベースごとに:

ALTER DATABASE database_name CHARACTER SET = utf8mb4 
    COLLATE = utf8mb4_unicode_ci;

各テーブルについて:

ALTER TABLE table_name CONVERT TO 
    CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

VARCHARまたはTEXT列ごとに:

ALTER TABLE table_name CHANGE column_name column_name 
    VARCHAR(69) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

データベースクエリでUTF-8文字を使用してデータを渡す場合は、確立されたデータベース接続がUTF-8エンコーディングに準拠していることを確認する必要があります。

JDBCベースの接続の場合、これは次の接続URLで実現できます。

jdbc:mysql://localhost:3306/?useUnicode=yes;characterEncoding=UTF-8

8. 結論

この記事では、TomcatがUTF-8エンコーディングを使用するようにする方法を示しました。