はじめに
Visual Studio Code(VSCode)で正常に動作していたJavaアプリケーションを、SAP Business Application Studio(BAS)に移行して実行しようとしたところ、ファイルの文字化けが原因でエラーが発生しました。
本記事では、発生した問題の原因と解決策について記載します。
環境
- 開発環境:Visual Studio Code (VSCode)
- 移行先の開発環境:SAP Business Application Studio (BAS)
- 言語 / フレームワーク:Java / Spring Boot
- 実行方法:launch.jsonによるデバッグ実行
- データベース:H2 Database
エラー内容
文字化けによりデータが桁数制限を超え、エラーが発生
※以下は一部抜粋したエラーメッセージです
org.h2.jdbc.JdbcSQLDataException:Value too long for column "IF_STATUS":"U&'\fffd\fffd\fffd\fffd...'" (12)
原因
VSCodeではJVMのデフォルト文字コードがUTF-8
に設定されているのに対し、BASのJVMではANSI_X3.4-1968
に設定されていたため、文字化けが発生しました。
以下のコードで確認した結果は次の通りです。
System.out.println(System.getProperty("file.encoding"));
実行環境 | 文字コード |
---|---|
Visual Studio Code (VSCode) | UTF-8 |
SAP Business Application Studio (BAS) | ANSI_X3.4-1968 |
試したこと
①application.ymlでSQLの文字エンコードを指定
sql:
init:
mode: always
encoding: UTF-8
→同様のエラーが発生しました。
②pom.xmlのSpring Boot Maven PluginにJVM引数を追加
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
→こちらも同様のエラーが発生しました。
解決策
launch.json
のvmArgs
に -Dfile.encoding=UTF-8
を追記することで解決しました。
"vmArgs": "-Dspring.profiles.active=development -Duser.timezone=UTC -Dfile.encoding=UTF-8"
結果
SQLの文字化けと桁数エラーが解消し、BASでも正常に動作することが確認できました。
System.out.println(System.getProperty("file.encoding"));
// 出力結果: UTF-8
さいごに
今回は、開発環境をVSCodeからBASへ移行した際に発生したJavaアプリの文字化け問題と、その原因・対処法をご紹介しました。
少しでも参考になれば幸いです。