2012-10-24 24 views
4

我們正在Linux服務器上運行默認語言環境爲「POSIX」的Java Web應用程序。 我們的一些客戶上傳文件名中包含非ascii字符的文件。 我們可以通過統一保留在Java中的非ASCII字符,但他們失去了(保存的文件名會包含很多問號)之後,我們實際上上傳的文件保存到文件系統,因爲文件系統的默認語言環境不支持非-ascii字符。 在使用Java保存文件之前,有什麼方法可以指定文件名(不是內容)的字符集?如何在Java中爲文件名(不是內容)指定一個字符集?

回答

3

便攜式的Java API沒有一個文件系統字符編碼的概念,因爲這將無法移植:例如視窗無論區域設置如何,都將文件名保存爲unicode。但是,在Linux上,您的語言環境的LC_CTYPE構面決定了文件系統的編碼。因此,通過出口LC_CTYPE=en_US.utf8或類似環境之前您啓動Java應用程序,應用程序將使用該文件名的處理。

另請參閱file.encoding has no effect, LC_ALL environment variable does it其中談到了一些這方面的轉換背後的內部的。

+0

我一直在打我的頭靠在牆上,感謝這個! – eric

0

如果文件是完全你的應用程序的控制下,而不是正在上載的其他應用程序使用,那麼我會考慮之前保存它們,例如做文件名的你自己的編碼/解碼URLEncoder.encode(filename, "UTF-8")將用戶提供的名稱映射到您可以在磁盤上使用的名稱,反之亦然URLDecoder.decode(encodedName, "UTF-8")

相關問題