列出文件时出现中文编码问题
我正在带有中文的 Solaris10
上运行 Java 应用程序。现在目录下有一些中文文件名的文件。当我执行 files = new File(dir).list()
时,其中“dir”是包含该中文文件的父目录,我得到结果文件名 files[0]
作为??????(一些垃圾字符)。
现在的问题是我的程序 file.encoding 属性已设置为 GBK 并且我还执行 Charset.isSupported("GBK")
和它也返回 true。那么问题可能出在哪里。我已经没有主意了。
注意:我不想在任何地方打印文件名或复制文件或其他东西。我只是打开一个流,如下所示:
files = new File(dir).list();
new FileInputStream(files[0]);
现在这给了我一个 FileNotFoundExcpetion,所以我调试只是发现 files[0] 内的值是“??????”。
I am running a Java application on a Solaris10 with Chinese
. Now there are some files in a directory with chinese filenames. When I do files = new File(dir).list()
where "dir" is the parent directory containing that chinese file, I get the result filename files[0]
as ?????(some junk characters).
Now the deal is that my programs file.encoding property is already set to GBK and I also do Charset.isSupported("GBK")
and it returns true too. So where could be the problem. I am running out of ideas.
NOTE: I am not trying to print the filename anywhere or copy the file or something. I am simply openeing a stream to it, something like below:
files = new File(dir).list();
new FileInputStream(files[0]);
Now this gives me a FileNotFoundExcpetion, so I debug just to find that value inside files[0] is "??????".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不确定这是否是一个好的做法。
尝试在启动 jvm 时设置字符集: java -Dfile.encoding="" ...
Not sure if it a good practice of doing it .
try setting the charset when you launch the jvm using : java -Dfile.encoding="" ...
好的,你可以试试这个吗?
这消除了对文件名的依赖,并直接使用 File 对象。
ok can you try this instead
This removes the dependencies on file names and works directly with the File object.
听起来您可能遇到了与 https://bugs.java.com 相同的问题/bugdatabase/view_bug?bug_id=4866151
通常,这是当使用一种编码创建文件然后尝试通过另一种编码读取时引起的。
It sounds like you are maybe hitting the same problem as https://bugs.java.com/bugdatabase/view_bug?bug_id=4866151
Usually this is caused when the file is created with one encoding and then tried to read via another.