回答
的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