我有一个定义编码的输入文件(utf8),我从中创建了不同的文件,其名称和内容(再次是utf8)来自该输入文件。
我的问题是,一个特定的Windows系统,创建的文件没有正确的字符。这些文件的内容是完全可读的,但他们的名字不是。
该文件名为Ü.xml
。
Ü.xml
在其他Windows系统上,一切正常。
文件内容的编码可以在OutputStreamWriter
的第二个参数中设置,但似乎无法在new File(name)
中设置文件名的编码。
感谢。
答案 0 :(得分:3)
看到两个字符应该有一个UTF-8多字节字符ü
。 Windows似乎没有UTF-8作为文件编码。并且将UTF-8文件复制到该系统上,例如解压缩zip文件。
System.getProperty("file.encoding")
应该提供平台编码。也许,可以远程想象,这是Java resp没有涵盖的一些奇怪的情况。 Windows,如压缩目录,或使用不支持UTF-8的文件系统格式化的第二个外部磁盘。
答案 1 :(得分:1)
Java使用“平台的默认字符集”将文件名转换为字符串,并且无法通过标准API更改该行为。 可能,在某些系统上,能够在启动JVM时更改默认编码:
java -Dfile.encoding=cp1252 package.ClassName
在其他系统上,影响文件名编码的唯一方法是通过系统区域设置。您可以在此处详细了解:http://jonisalonen.com/2012/java-and-file-names-with-invalid-characters/