character-encoding - 如何配置 Jetty 以正确解释文件名中的 UTF-8
问题描述
升级到 eXist-db 4.7.0 后,对于带有 UFT-8 重音字符或中文字符的文件名,现在出现 Jetty 404 错误。知道是否有配置文件来管理它吗?
例如:
HTTP ERROR 404
Problem accessing /.../dicoEnviro-fr/humanit%C3%A9.xml.
Reason: Document /.../dicoEnviro-fr/humanité.xml not found
Powered by Jetty:// 9.4.14.v20181114
解决方案
使用 Jetty 9.4.20.v20190813(java.nio.file.FileSystem
自 9.4.16.v20190411 以来,您需要对当前资源的 UTF-8 处理进行更新)
由于我不知道 eXist-db 对启动 Jetty 做了什么,我将假设它是嵌入式的,并根据该假设进行回答。
确保您的ServletContextHandler
orWebAppContext
被声明为使用定义为对象的基本资源,该PathResource
对象指向您定义为java.nio.file.Path
对象的目录位置。
关于基础资源声明的建议:
- 不要使用 a
String
来定义它,它最终会URLResource
与 URL 引用一起使用,而不是文件系统路径,并且您将遇到遇到的问题。 - 不要使用 a
File
来定义它,因为它最终会成为FileResource
不推荐使用的功能,并且已知在 UTF-8 引用方面存在问题。 - 确保您
java.nio.file.Path
的路径是绝对路径。(没有相对路径) - 确保你
java.nio.file.Path
的标准化。(无"//"
或"/../"
段)
推荐阅读
- python - Python 3.7 Windows 不支持 dbm.gnu 吗?
- matlab - 如何在 MATLAB 仿真运行时存储特定时间步长的变量值?
- sql - 我无法在 if 语句中放置选择查询。我应该如何更换它?
- python - 如何使用 Python 下载 mpeg/mp3?
- java - Jackson:根据字段类型添加后缀
- server - 虽然给了 REST 参数 autoStart=false,但是当我们重启服务器时,流源开始拉入 Ant Media Server
- java - 在 jsp 中获取 LocalTime 输入
- javascript - 使用 Javascript/jQuery 动态添加行跨度
- javascript - 将数组与javascript中的嵌套数组进行比较
- php - 更新 URL 作为输入值