Intellij IDEAのコンソールでの文字化けの原因について
お世話になっています。
Intellij IDEA (2017.3.4)でJavaの開発をしています。その中で
System.out.println("あいうえお");
のように日本語の文字を出力すると文字化けします。いくつか注意点を述べます。
以前は文字化けしませんでした。ある時期から起きるようになったので不注意でなにか設定を変えたのかも知れませんが、思い当たるフシがありません。
コンソールの非ASCII文字、確認しているだけで日本語、中国語、フランス語特有の文字が?に置き換わります。
非ASCII文字に関連するテストが失敗します。単にコンソールで?になるだけでなく、内部的にも問題が起きているように思います。
maven projectからtestした場合にはテストが失敗しますが、Projectで右クリックをしてRun Testした場合にはテストは成功しますし、文字化けもしません。
ターミナルで実行(mavenプロジェクトですので、mvn clean packageなど)した場合には文字化けもテストで失敗もしません。
新規プロジェクトを作り、JUnit4のテストクラスを作り実行しても文字化けします。
_
import org.junit.Test;
import static org.junit.Assert.*;
public class MainTest {
@Test
public void test() {
System.out.println("あいうえお");
}
}
つまり文字化けが起こるのはIntellij IDEAのMaven Projectから実行したときのみです。それ以外、ターミナルから実行したり、プロジェクト(通常左側にあるファイルの一覧)から実行したときも文字化けは起きません。
pom.xml
は再三見ていますが、これと言って怪しそうな箇所はありません(見落としているだけかも知れません)。該当のpom.xml
を載せることはできなくて申し訳ありません。
もし心当たりがある方がいらっしゃいましたら助言をお願いします。
追記
packet0さんの回答で無事に解決しました。いくつか新しく気づいたことを追記しておきます。
テストの文字化けについて
これは教えていただいたとおり次の記述を足すことで解決しました。ポイントは<argLine>-Dfile.encoding=UTF-8</argLine>
でした。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<junitArtifactName>junit:junit</junitArtifactName>
<argLine>-Dfile.encoding=UTF-8</argLine>
<skipTests>false</skipTests>
</configuration>
</plugin>
exec:execについて
別のプロジェクト(jettyを使ったプロジェクトでログをコンソールに表示していた)では相変わらず化けていましたが、今回のことをヒントに次のようにしたところ、コンソールのログの文字化けが直りました。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Dtomcat.util.scan.StandardJarScanFilter.jarsToScan=taglibs-standard-impl-*</argument>
<argument>-Dtomcat.util.scan.StandardJarScanFilter.jarsToSkip=apache-*,ecj-*,jetty-*,asm-*,javax.servlet-*,javax.annotation-*,taglibs-standard-spec-*</argument>
<argument>-Dfile.encoding=UTF-8</argument>
<argument>-cp</argument>
<classpath />
<argument>プロジェクト名</argument>
<argument>8888</argument>
</arguments>
</configuration>
</plugin>
ポイントはやはり<argument>-Dfile.encoding=UTF-8</argument>
です。
回答ありがとうございました!