2012-06-08 57 views
2

我有字符串在java中是包含元音變元的文件名。文件正確存儲在Win 7 Pro磁盤上(在資源管理器文件列表中,umlauts等顯示正確)。我也嘗試將文件名保存到文本文件,然後使用變音符號正確輸出文件名。但是當我使用File存在的方法()時,它說文件不存在。如果我嘗試使用方法createNewFile(),它會創建文件,如Ã..txt(最初爲ä.txt)。我的設置中有什麼可能是錯誤的?我使用Tomcat 6和Eclipse來運行我的Web應用程序。在Java中的編碼問題文件

+0

什麼是Eclipse項目屬性中的編碼設置? –

+1

文件名是在您的代碼中硬編碼還是從某處讀取? – Robert

+0

@Robert它是從http請求中讀取的,但是如果我將該字符串寫入文本文件,那麼它將被正確打印,所以它不能與此相關。 – newbie

回答

2

如果文件名將作爲靜態常量包含在您的源代碼中,那麼您的代碼在執行時不會有什麼區別,但是當您從遠程地址讀取文件名時,它會產生顯着差異。

默認情況下,每個Java實例作爲Windows上的默認字符集,通常爲「Cp1252」,其他系統通常爲「UTF-8」。因此,只要不使用明確指定字符集的方法版本,每個從網絡或文件系統讀取或寫入字符串的方法都會使用默認字符集。

因此,將文件名寫入文件並不能說明所有內容,因爲如果顯示正確,則取決於您使用的文本編輯器而不是寫入它的Java程序。

結論:仔細檢查您的代碼並確保您明確設置了字符集。這與String的方法getBytes()以及每個連接到InputStream/OutpuStream的Reader/Writer實例的方法都是特別相關的。