首页 > 解决方案 > 如何配置 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

标签: character-encodingjettyfilenamesexist-db

解决方案


使用 Jetty 9.4.20.v20190813(java.nio.file.FileSystem自 9.4.16.v20190411 以来,您需要对当前资源的 UTF-8 处理进行更新)

由于我不知道 eXist-db 对启动 Jetty 做了什么,我将假设它是嵌入式的,并根据该假设进行回答。

确保您的ServletContextHandlerorWebAppContext被声明为使用定义为对象的基本资源,该PathResource对象指向您定义为java.nio.file.Path对象的目录位置。

关于基础资源声明的建议:

  • 不要使用 aString来定义它,它最终会URLResource与 URL 引用一起使用,而不是文件系统路径,并且您将遇到遇到的问题。
  • 不要使用 aFile来定义它,因为它最终会成为FileResource不推荐使用的功能,并且已知在 UTF-8 引用方面存在问题。
  • 确保您java.nio.file.Path的路径是绝对路径。(没有相对路径)
  • 确保你java.nio.file.Path的标准化。(无"//""/../"段)

推荐阅读