列出文件时出现中文编码问题

发布于 2024-08-24 07:33:59 字数 587 浏览 6 评论 0原文

我正在带有中文的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

零度° 2024-08-31 07:33:59

不确定这是否是一个好的做法。
尝试在启动 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="" ...

赴月观长安 2024-08-31 07:33:59

好的,你可以试试这个吗?

//String[] files = new File(dir).list(); 
File[] files = new File(dir).listFiles(); //use 'File' references instead.
FileInputStream fos = new FileInputStream(files[0]);

这消除了对文件名的依赖,并直接使用 File 对象。

ok can you try this instead

//String[] files = new File(dir).list(); 
File[] files = new File(dir).listFiles(); //use 'File' references instead.
FileInputStream fos = new FileInputStream(files[0]);

This removes the dependencies on file names and works directly with the File object.

2024-08-31 07:33:59

听起来您可能遇到了与 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文