我有一个运行web应用程序的客户端轮询特定目录。 具有特殊字符的文件将这些字符转换为“?”。
示例文件名:java.io.FileNotFoundException: Garc??a.pdf (No such file or directory)
我没有从数据库中获取特定文件名,并且文件在磁盘上具有正确的文件名。我无法在自己的机器上重现它。
[-Dnop]
[-Dcatalina.home=/app/tomcat]
[-Dcatalina.base=/app/tomcat]
[-Djava.io.tmpdir=/app/tomcat/tmp]
[-Djava.endorsed.dirs=/app/tomcat/lib-endsed]
[-Dep.tomcat.http.port=8080]
[-Dep.tomcat.shutdown.port=64006]
[-Dep.tomcat.rmi.port=64008]
[-Dep.tomcat.sso.enabled=false]
[-Djava.security.auth.login.config=/app/tomcat/etc/jaas.config]
**[-Dfile.encoding=UTF-8]**
[-Dcom.sun.management.jmxremote=true]
[-Dcom.sun.management.jmxremote.port=64007]
[-Dcom.sun.management.jmxremote.authenticate=true]
[-Dcom.sun.management.jmxremote.ssl=false]
[-Dspring.profiles.active=production]
[-Degrants.configuration=/app/tomcat/etc/test.properties]
[-Dops.product=tomcat]
[-Dops.node.number=uniq]
[-Xms1024m]
[-Xmx1024m]
[-XX:PermSize=128m]
[-XX:MaxPermSize=128m]
[-XX:+UseParallelGC]
[-XX:+AggressiveOpts]
[-XX:+UseFastAccessorMethods]
特定文件夹是使用NFS
java version "1.6.0_91"
Java(TM) SE Runtime Environment (build 1.6.0_91-b13)
Java HotSpot(TM) Server VM (build 20.91-b07, mixed mode)
env | grep LANG
NLS_LANG=American_America.UTF8
我在答案@ How to Find the Default Charset/Encoding in Java?中添加了代码。日志打印出正在使用的UTF-8:
Default Charset=UTF-8
file.encoding=UTF-8
Default Charset in Use=UTF8
除了要求客户更改JDK之外我无法真正想到其他事情要做。有什么建议?可能是什么导致了这个?我该如何解决?
从轮询实际文件系统中提取文件名。我们使用File java类的listFiles()方法来获取文件夹中的文件。 参考:https://docs.oracle.com/javase/6/docs/api/java/io/File.html#listFiles()