我在Java文件编码方面遇到问题。Java以文件名保存带有特殊字符的文件
我有一个Java程序将一个输入流保存为一个给定的文件名的文件,代码片段是这样的:
File out = new File(strFileName);
Files.copy(inStream, out.toPath());
它工作正常的Windows,除非文件名中包含一些特殊字符,如Ö
,这些字符在文件名中,保存的文件将在Windows上显示乱码的文件名。
据我所知,通过应用JVM选项-Dfile.encoding=UTF-8
这个问题可以修复,但我会在我的代码中有一个解决方案,而不是要求我的所有用户更改他们的JVM选项。
在调试程序时,我可以看到文件名字符串总是显示正确的字符,所以我猜这个问题不是关于内部编码。
请问有人能解释幕后出了什么问题吗?有没有一种方法来编程避免这个问题?我试图从字符串中获取字节并更改编码,但它不起作用。
谢谢。
是否设置'-Dfile.encoding'选项实际上解决这个问题?因为在从文件读取时使用它,而不是为文件名本身。你从哪里得到文件名字符串? – Thilo
看来参数确实也会影响文件名的编码方式:http://stackoverflow.com/questions/9196950/setting-file-name-encoding – Thilo
@Thilo是的,JVM选项适用于这个问题。当我用瑞典文件名测试时发现问题。 –