質問編集履歴

2 誤字訂正しました。

osatsu

osatsu score 4

2017/11/12 12:32  投稿

(Java) 日本語を入力すると文字化け【SpringBoot + Thymeleaf +MySQL +cloudfoundry】
###前提・実現したいこと
SpringBoot + ThymeleafでWebアプリを開発中です。
機能としては
ブラウザに入力フォームを配置し
入力された値をDBに登録、そして
登録されたデータ達をブラウザ上で一覧表示させるというものです。
以下のような流れです。
・STSで開発したコード類を実行可能JARとしてビルドし、これをcloudfoundry(Pivotal)にデプロイ
・cloudfoundryではcleardbのサービス(MySQL)を利用。
・デプロイしたアプリとDBサービスをバインドし、アプリを起動
・無事に起動に成功したが、日本語データを入力・登録しようとすると全ての日本語(全角文字)データが「?」に置き換えられ、文字化けが発生
ちなみに文字化けしたのはフォーム入力を経由しているものだけで、
HTMLに直接打ち込んだ日本語や、
thymeleafの変数式に直接代入(フォーム入力値ではなく、事前にコードに書いておいた固定の文字列)した文字列(日本語)は
文字化けしていません。
現在文字化け解消に向けて試行錯誤中です。
###発生している問題・エラーメッセージ
```
同じアプリをローカル環境(ローカルのMySQL)で起動した所、
日本語データも問題なく登録・表示されました(読み込んでいるpropertiesファイルはapprication.propertiesです)。
また、cleardbのサービスインスタンスに対して
ローカルと同じようにコマンドプロンプトからアクセスし、
以下の事を試しました。
手入力で日本語のデータを登録し、これをデプロイしたアプリ上から確認。
このデータは文字化けせずに日本語のまま表示されていました。
したがって、入力フォームに記入した値をDBに引き渡す過程で何か問題がある可能性があると考えています。
それがthymeleafの変数式によるものなのか、リポジトリによるものなのか分かりません。
文字化けに関して自分なりに色々調べ試してみましたが未だに解消には至っておりません。
ちなみに、
コマンドプロンプトにて確認したcleardbのMySQL文字コードは以下の通りです。
ローカル環境と違って設定ファイルをいじって文字コードを変える事ができなさそうなので悩んでいます。
+--------------------------+------------------------------+
| Variable_name           | Value                       |
+--------------------------+------------------------------+
| character_set_client    | cp932                       |
| character_set_connection | cp932                       |
| character_set_database  | utf8                        |
| character_set_filesystem | binary                      |
| character_set_results   | cp932                       |
| character_set_server    | latin1                      |
| character_set_system    | utf8                        |
| character_sets_dir      | /usr/share/mysql56/charsets/ |
+--------------------------+------------------------------+
また、参考までにローカルDBの文字コードは以下の通りです。
+--------------------------+---------------------------------------------------------+
| Variable_name           | Value                                                  |
+--------------------------+---------------------------------------------------------+
| character_set_client    | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database  | utf8                                                   |
| character_set_filesystem | binary                                                 |
| character_set_results   | utf8                                                   |
| character_set_server    | utf8                                                   |
| character_set_system    | utf8                                                   |
| character_sets_dir      | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
```
###該当のソースコード
```Java
#以下の内容はapprication-cloud.propertiesのもの。
#springboot1.4からspring.datasource.connectionPropertiesは使えなくなった模様。
#代わりに↓を記述。
spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=UTF-8;
spring.datasource.tomcat.driver-class-name=com.mysql.cj.jdbc.Driver
#datasource系
spring.datasource.sql-script-encoding=UTF-8
#thymeleafの設定
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode: HTML
#EMBEDDED(埋め込み)tomcatの設定?
server.tomcat.uri-encoding=UTF-8
#これがCharacterEncodingFilterに相当する設定?
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
```
###試したこと
各ファイルのtext file encoding の確認(UTF-8)
application-cloud.properties内での設定の見直し(上記参照)
###補足情報(言語/FW/ツール等のバージョンなど)
[OS]
win10
[開発言語]
Java
[開発環境]
STS3.9.0.
SpringBoot1.5.7.
Thymeleaf3.0.2.
[デプロイ先]
PivotalCloudFoundry(Pivotal Web Services)
[使用DB]
Cleardb MySQL(CloudFoundryのサービスインスタンス)
###追記
```  
clearDBのMySQLサービスインスタンス内の文字コード
(win10コマンドプロンプト経由で確認。)
【データベースの文字コード】
mysql> show create database データベース名 ;
+--------------------+-----------------------------------------------------------------------------+
| Database          | Create Database                                                            |
+--------------------+-----------------------------------------------------------------------------+
| データベース名 | CREATE DATABASE `データベース名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------------+-----------------------------------------------------------------------------+
1 row in set (0.19 sec)
【テーブルの文字コード】
mysql> show create table テーブル名;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                      |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| テーブル名 | CREATE TABLE `テーブル名` (カラム定義) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.17 sec)
【ビューの文字コード】
mysql> show create view ビュー名;
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View      | Create View                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | character_set_client | collation_connection |
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| ビュー名 | ビューの生成規則 | utf8                | utf8_general_ci     |
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.20 sec)
1 row in set (0.20 sec)
```
  • Java

    17048 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    7579 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • 文字コード

    280 questions

    文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

  • Thymeleaf

    217 questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

  • Spring Boot

    834 questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1 文字コード情報を追記しました。

osatsu

osatsu score 4

2017/11/12 12:30  投稿

(Java) 日本語を入力すると文字化け【SpringBoot + Thymeleaf +MySQL +cloudfoundry】
###前提・実現したいこと
SpringBoot + ThymeleafでWebアプリを開発中です。
機能としては
ブラウザに入力フォームを配置し
入力された値をDBに登録、そして
登録されたデータ達をブラウザ上で一覧表示させるというものです。
以下のような流れです。
・STSで開発したコード類を実行可能JARとしてビルドし、これをcloudfoundry(Pivotal)にデプロイ
・cloudfoundryではcleardbのサービス(MySQL)を利用。
・デプロイしたアプリとDBサービスをバインドし、アプリを起動
・無事に起動に成功したが、日本語データを入力・登録しようとすると全ての日本語(全角文字)データが「?」に置き換えられ、文字化けが発生
ちなみに文字化けしたのはフォーム入力を経由しているものだけで、
HTMLに直接打ち込んだ日本語や、
thymeleafの変数式に直接代入(フォーム入力値ではなく、事前にコードに書いておいた固定の文字列)した文字列(日本語)は
文字化けしていません。
現在文字化け解消に向けて試行錯誤中です。
###発生している問題・エラーメッセージ
```
同じアプリをローカル環境(ローカルのMySQL)で起動した所、
日本語データも問題なく登録・表示されました(読み込んでいるpropertiesファイルはapprication.propertiesです)。
また、cleardbのサービスインスタンスに対して
ローカルと同じようにコマンドプロンプトからアクセスし、
以下の事を試しました。
手入力で日本語のデータを登録し、これをデプロイしたアプリ上から確認。
このデータは文字化けせずに日本語のまま表示されていました。
したがって、入力フォームに記入した値をDBに引き渡す過程で何か問題がある可能性があると考えています。
それがthymeleafの変数式によるものなのか、リポジトリによるものなのか分かりません。
文字化けに関して自分なりに色々調べ試してみましたが未だに解消には至っておりません。
ちなみに、
コマンドプロンプトにて確認したcleardbのMySQL文字コードは以下の通りです。
ローカル環境と違って設定ファイルをいじって文字コードを変える事ができなさそうなので悩んでいます。
+--------------------------+------------------------------+
| Variable_name           | Value                       |
+--------------------------+------------------------------+
| character_set_client    | cp932                       |
| character_set_connection | cp932                       |
| character_set_database  | utf8                        |
| character_set_filesystem | binary                      |
| character_set_results   | cp932                       |
| character_set_server    | latin1                      |
| character_set_system    | utf8                        |
| character_sets_dir      | /usr/share/mysql56/charsets/ |
+--------------------------+------------------------------+
また、参考までにローカルDBの文字コードは以下の通りです。
+--------------------------+---------------------------------------------------------+
| Variable_name           | Value                                                  |
+--------------------------+---------------------------------------------------------+
| character_set_client    | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database  | utf8                                                   |
| character_set_filesystem | binary                                                 |
| character_set_results   | utf8                                                   |
| character_set_server    | utf8                                                   |
| character_set_system    | utf8                                                   |
| character_sets_dir      | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
```
###該当のソースコード
```Java
#以下の内容はapprication-cloud.propertiesのもの。
#springboot1.4からspring.datasource.connectionPropertiesは使えなくなった模様。
#代わりに↓を記述。
spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=UTF-8;
spring.datasource.tomcat.driver-class-name=com.mysql.cj.jdbc.Driver
#datasource系
spring.datasource.sql-script-encoding=UTF-8
#thymeleafの設定
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode: HTML
#EMBEDDED(埋め込み)tomcatの設定?
server.tomcat.uri-encoding=UTF-8
#これがCharacterEncodingFilterに相当する設定?
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
```
###試したこと
各ファイルのtext file encoding の確認(UTF-8)
application-cloud.properties内での設定の見直し(上記参照)
###補足情報(言語/FW/ツール等のバージョンなど)
[OS]
win10
[開発言語]
Java
[開発環境]
STS3.9.0.
SpringBoot1.5.7.
Thymeleaf3.0.2.
[デプロイ先]
PivotalCloudFoundry(Pivotal Web Services)
[使用DB]
Cleardb MySQL(CloudFoundryのサービスインスタンス)
Cleardb MySQL(CloudFoundryのサービスインスタンス)
###追記
clearDBのMySQLサービスインスタンス内の文字コード
(win10コマンドプロンプト経由で確認。)
【データベースの文字コード】
mysql> show create database データベース名 ;
+--------------------+-----------------------------------------------------------------------------+
| Database          | Create Database                                                            |
+--------------------+-----------------------------------------------------------------------------+
| データベース名 | CREATE DATABASE `データベース名` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------------------+-----------------------------------------------------------------------------+
1 row in set (0.19 sec)
【テーブルの文字コード】
mysql> show create table テーブル名;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                      |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| テーブル名 | CREATE TABLE `テーブル名` (カラム定義) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.17 sec)
【ビューの文字コード】
mysql> show create view ビュー名;
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View      | Create View                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | character_set_client | collation_connection |
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| ビュー名 | ビューの生成規則 | utf8                | utf8_general_ci     |
+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.20 sec)
  • Java

    17048 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • MySQL

    7579 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • 文字コード

    280 questions

    文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

  • Thymeleaf

    217 questions

    Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

  • Spring Boot

    834 questions

    Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る