使用 getPageContext().getRequest().getParameterValues() 时如何防止 unicode 字符损坏?

问题描述

我们有一个场景,一个页面提交多个同名字段。为了解决 CF 的方法,将它们放入逗号分隔的字符串中,而不在应用程序范围内更改,我们使用 getPageContext().getRequest().getParameterValues("#fieldname#") 将某些位置的字段值作为数组访问。

我们遇到的问题是提交的 unicode 字符已损坏。例如,字段数组中的 El celular que compré está averiado 作为字符串 El celular que compré está averiado 返回。如果我转储 getHTTPRequestData(),我可以看到正确编码的 El+celular+que+compr%C3%A9+est%C3%A1+averiado url 被发送到服务器。

Java 字符串是否没有被 CF 正确处理?无论如何要在非应用程序范围的基础上解决这个问题,而不是解析我们真的不想做的 getHTTPRequestData().content

解决方法

原因是你的网络服务器没有在内部使用 utf-8 来编码参数。在通过 url 范围访问变量时,您通常不会看到这一点,因为 CF 已经为您转换了它们,但是在查看 cgi.query_string 或 {{1} 时您可以看到这种差异}

就您而言,您看到的是 getPageContext().getRequest().getParameterValues(...) 编码。我在 IIS7.5 - IIS8 周围有类似的问题。假设您不能或不想冒险尝试更改您的网络服务器配置,此解决方法应该适合您:

windows-1252