LoginSignup
3
0

More than 3 years have passed since last update.

FitGen.exeを日本語Windowsで実行したとき発生するJavaのエンコーディングに関するエラーを回避する

Posted at

TL;DR

環境変数の JAVA_TOOL_OPTIONS-Dfile.encoding=UTF-8 を設定する。

環境変数_JAVA_TOOL_OPTIONS.PNG

詳細

GARMIN FIT SDKでカスタムメッセージ等を定義した場合、FitGen.exeを実行しFIT SDKを生成する必要がある。
https://developer.garmin.com/fit/cookbook/fitgen/

しかし、最近Garmin Developersで配布されているFIT SDKのEventMesg.javaのドキュメントコメントに謎の文字化けが混入しておりそのままFitGen.exeを実行すると

> .\FitGen.exe -o test -java
FIT Code Generator - Protocol 2.00  Profile 21.40Release
SDK Version: production/akw/21.40.00-0-g813c158
Parsing existing config.csv...
Writing new config.csv...
Generating Java code...
Building Java tools...0%
com\garmin\fit\EventMesg.java:679: エラー: この文字は、エンコーディングMS932にマップできません
     * Comment: Theテつ?firstテつ?byteテつ?isテつ?theテつ?radar_threat_level_max, theテつ?secondテつ?byteテつ?isテつ?theテつ?radar_threat_count, and theテつ?lastテつ?16テつ?bitsテつ?areテつ?reservedテつ?forテつ?futureテつ?useテつ?andテつ?shouldテつ?beテつ?setテつ?toテつ?FFFF.
                     ^
以下略

というエラーが発生し、ビルドに失敗する。

この文字は、エンコーディングMS932にマップできません というエラーはjavacにUTF-8等適切なエンコーディングを渡してやることで回避することが可能。以下のようなオプションを渡すことで回避できる。

javac -encoding UTF-8 EventMesg.java

しかしFitGen.exeの場合、javac呼び出し部分はFitGen.exe内部で行われているので直接javacにオプションを渡すことができない。

そこでFitGen.exeを実行するWindowsのユーザー環境変数にJAVA_TOOL_OPTIONSを追加し、javacに渡したいオプションを指定することでエラーを回避することができる。

https://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/envvars002.html
https://qiita.com/n_slender/items/6c566bb345e844ba8127

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0