设置文件名编码

我有一个定义的编码(utf8)的输入文件,我从中创建不同的文件,其名称和内容(再次utf8)从输入文件中获取。

我的问题是,一个特定的Windows系统,创建的文件没有正确的字符。 这些文件的内容是完全可读的,但它们的名字不是。 该文件的名称为├£.xml ,而不是Ü.xml

在其他Windows系统上一切正常。

文件内容的编码可以在OutputStreamWriter的第二个参数中设置,但文件名的编码似乎不能在new File(name)中设置。

谢谢。

看到两个字符应该有一个UTF-8多字节字符。 Windows似乎没有UTF-8作为文件编码。 并且将UTF-8文件复制到该系统上,就像解压缩zip文件一样。

System.getProperty("file.encoding")应该给出平台编码。 也许,可以远程想象,这是Java resp没有涵盖的一些奇怪的情况。 Windows,如压缩目录,或使用不支持UTF-8的文件系统格式化的第二个外部磁盘。

Java使用“平台的默认字符集”将文件名转换为字符串,并且无法通过标准API更改该行为。 在某些系统上,您可以在启动JVM时更改默认编码:

 java -Dfile.encoding=cp1252 package.ClassName 

在其他系统上,影响文件名编码的唯一方法是通过系统区域设置。 你可以在这里阅读更多相关信息: http : //jonisalonen.com/2012/java-and-file-names-with-invalid-characters/