先上解决方案:
1.设置encoding:<argLine>-Dfile.encoding=UTF-8</argLine>,解决读取文件中的中文乱码问题
2.升级maven-surefire-plugin的版本至最新,解决日志输出中的中文乱码问题
问题现象:
mvn有两种情况下的乱码,第一种如下:
我的test,是从一个json文件中读取数据,然后通过test的case会将文件中的数据写入数据库,那么问题来了,我发现写入到数据库的中文乱码。
但是我用JUnit跑时,不会出现这种问题,所以这肯定是mvn test的问题,于是我做了如下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.5</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine><!-- 解决从json中读取测试数据时的中文乱码问题 -->
</configuration>
</plugin>
关键处在于: <argLine>-Dfile.encoding=UTF-8</argLine>。
好了,现在再用mvn test 测试,后去数据库查看数据中文是正常的。
这时我想输出下每个case的comments,是中文的,于是我用了logger.info(casejson.getString("comments")),问题又来了,控制台输出的测试报告中中文居然又乱码了,我尝试了下system.out.println("中文乱码否?"),它在测试报告中居然也是乱码!我想起我在配置surefire时是随便从网上拷下来的,拷时我还特意看了下发表时间,它是2012年,我并没有升级它的版本,我想先升级下,再找解决方案吧,于是我把它升级到了最新。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dfile.encoding=UTF-8</argLine><!-- 解决从json中读取测试数据时的中文乱码问题 -->
</configuration>
</plugin>