记一次Java使用Jna.jar调用DLL-字符集乱码的坑
这两天使用jna调用科大讯飞的离线命令词DLL,其中一个方法“获取命令结果的接口”,返回的是 char*,那么对应着java的话就是String类型,然而,这种写法写完之后再IDEA运行没有任何问题,但是一旦打成jar包,地狱噩梦就开始了,因为不管比怎么改,返回的字符串始终都是乱码。
在网上也有很多种解决办法,都无法解决问题:如下:
System.setProperty(“jna.encoding”,“GBK”);
网上说的最多的解决办法就是这个了,但是这种方法缺无法解决问题,反而使返回的乱码字符串变为了另外一种乱码字符串。。。。
最重要的是这种方法导致本来不乱码的字符串也全部乱码了。。new String(“str”.getBytes(), “UTF-8”)
对于这种写法,使用之后就会发现,其实没有什么用处
通过不懈努力,最终终于找到了一个解决办法
虽然不知道为什么,但记录一下:
在启动jar包的时候使用命令:java -Dfile.encoding=utf-8 -jar .\jar.jar
在这里多了一句-Dfile.encoding=utf-8
这样一来,DLL接口返回的字符串就变成了正常的中文
不过,这样写会导致CMD不再友好,我使用logj打印的日志在CMD显示全部变为了乱码(不过不影响日志文件),只有system.out.print打印的文字是正常的
最后,要注意一下,只有正常打开的cmd窗口才能执行该命令,win10的PowerShell窗口是无法执行的
.
.
.
.
写在最后:
这些结论是我经过不断踩坑最后的解决办法,如果有更好的解决办法欢迎留言
版权声明:本文为jingchao1998原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。