我的问题是,在 Java 中,我有机会将用户重定向到其他地方,其他地方是用户可定义的。代码如下所示:
response.sendRedirect(redirectURL)
. 我的重点是变量redirectURL 中表示的字符串。我的理解是这样的,指定 response.setCharacterEncoding 会影响写入响应编写器的内容,而不影响 sendRedirect 的内容。通过在连接器上添加 URIEncoding=,在基于 tomcat 的容器中,应该处理 URL 的路径是简体中文、日文或非 ascii 字符但它没有的情况,这似乎是合理的。我的部分问题是为什么。
这里有很多回复说明使用 URLEncode。但是在 issue 4571346 如何编码 URL 以避免 java 中的特殊字符
Wyzard 声明不应该使用,而是
- 创建一个 URI 对象
- 通过 toASCIIString 创建正确的 URL 字符串。
在我的示例用例中,这可以正常工作,尽管此代码需要在 every 之前执行response.sendRedirect()
,这很多。
随着越来越多的应用程序在全球范围内使用,我看到这个问题有效地渲染了直接 HTTPResponse 方法 sendRedirect 的不足,因为它本身可能无法正常工作。
我参考了处理应用程序中的国际化域名的 RFC3490,它讨论了 toASCII 作为两个操作之一,另一个是 toUnicode。
那么,为什么连接器上的 URIEncoding= 不处理这个问题,应该这样吗?是否有更首选的方法来处理路径国际化的 URL?我只是相信,通过关注点分离,这个问题是并且应该是容器问题,而不是应用程序问题。我希望这将为讨论这个问题提供一个论坛,而不是 HTML,不是表单,不是 URL 本身以外的任何东西。