回答
的Java本身使用Unicode - 你不需要更換特殊字符,爲Unicode 有無特殊字符 - 每一個代碼點被平等對待。您的replaceSpChars()
可能是這裏的罪魁禍首。
問題是我的程序無法保證這些目錄和文件名是英文的。如果一個文件名使用日文,中文字符它將顯示一些像'?'的字符。
問題很明顯,「it」使用錯誤的字符集來顯示文件名。解決方案取決於「它」是否是您的程序(通過GUI),某個其他應用程序,命令外殼程序/終端仿真程序還是用戶的Web瀏覽器。如果你能提供更多信息,也許我可以提供一些建議。
但是將字符轉換爲下劃線很可能是一個不好的解決方案。這很容易導致文件名衝突,並且這些中文/日文/等字符對於創建文件的人最有可能是有意義的。
順便說一句,「英文」字母的正確術語是拉丁文。
編輯
爲您的使用情況,您不要使用帶有任何關係所提供的文件名的文件名保存PDF文件。我建議您嘗試使用由(例如)currentTimeInMillis()
生成的拉丁數字和字母組成的文件名來解決問題。如果失敗了,那麼你真正的問題根本與文件名無關。
EDIT 2
你問有關語句
if (fileName.startsWith("=?iso-8859"))
這似乎是試圖拆散的MIME encoded-word
格式的文件名;請參閱RFC 2047 Section 2
首先,我認爲代碼可能是不必要的。 javadoc不是特定的,但我認爲Part.getFilename()
方法應該處理文件名的解碼。
其次,如果解碼是必要的,那麼你就會以錯誤的方式去解決問題。字符集之後的內容不能簡單地視爲文件名的值。看看RFC。
三,如果您需要您應該使用相關的MimeUtility
方法來解碼「單詞」標記......就像文件名。
第四,ISO-8859-1不適用於非拉丁字符集中的字符。
最後,檢查電子郵件的原始郵件的標題,你試圖解碼,並尋找開始
Content-Disposition: attachment; filename=...
如果文件名看起來像「=?ISO-8859-1的標題行? ..「,並且文件名應該包含日文/中文/等字符,那麼問題出現在構建電子郵件的客戶端(或其他)中。字符集需要是「utf-8」或其他多字節字符集之一。
- 1. Perl - 處理非英文(日文)名稱的文件
- 2. rich:fileUpload - 非英文名稱的文件
- 3. Primefaces fileDownload非英文文件名損壞
- 4. 從非英文文件名和非英文文本中讀取C++
- 5. 驗證非英文域名
- 6. python中非英文文件名的文件操作
- 7. 如何遍歷PHP中的非英文文件名
- 8. call avio_open函數與非英文文件名無效
- 9. 讀非英語文件
- 10. PHP ZipArchive非英文文件名在歸檔中返回時髦的文件名
- 11. 非英文成員名稱應該改爲英文嗎?
- 12. XStream的處理非英文字符
- 13. 在C中處理非英文字符#
- 14. file_get_contents在DRUPAL中無法使用非英文文件名
- 15. 非英文文件名轉換成Android手機使用adb push
- 16. Vista/Win7中的非英文特殊文件夾名稱
- 17. is_dir()與非英文字符
- 18. phantomjs與非英文網址
- 19. 使用MySQL排序非英文名稱
- 20. drupal中的非英文url別名
- 21. Facebook不喜歡非英文域名
- 22. 非英文文本識別
- 23. 在文件名中創建包含非英文字符的文件
- 24. 在XHR中處理非ASCII文件名
- 25. 石英調度與批處理文件
- 26. php項目,非英文名稱的文件在下載時有空白名稱
- 27. C#閱讀非英文文本文件,並寫入ListView控件
- 28. 導入非英語shape文件
- 29. Java郵件編碼非英文字符
- 30. 編碼非英文字體
哪種語言和平臺是那種? – 2010-11-25 09:12:38
你的問題到底是什麼?你似乎在替換特殊字符,那麼問題是什麼? – 2010-11-25 09:21:24
我會在這裏鈍。你還沒有確切地說明你的程序在做什麼以及它在哪裏遇到麻煩。顯示文件名有困難嗎?如果是這樣,它如何顯示文件名?它是使用Spring,JSF,Wicket等的Swing應用程序或Web應用程序嗎?從您提供的代碼中,我只能推斷出您正試圖阻止顯示「特殊」字符,如果您最終要處理ANSI或ISO-8859-1字符,則不應引起問題。 – 2010-11-25 12:20:47