我在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選項適用於這個問題。當我用瑞典文件名測試時發現問題。 –