【发布时间】:2011-07-31 12:47:36
【问题描述】:
当我从网页提交字符 Ö 时,后端会收到 Ã。该网页是 Spring Webflow/JSF1.2/Facelets 应用程序的一部分。当我用萤火虫检查 POST 时,我看到:
Content-Type: application/x-www-form-urlencoded
Content-Length: 74
rapport=krediet_aanvragen&fw1=0&fw2=%C3%96ZTEKIN&fw3=0&fw4=0&zoeken=Zoeken
字符 Ö 编码为 %C3%96,使用this 表我可以看到它是 UTF-8/Unicode 字符 Ö 的正确十六进制表示。 但是,当它到达后端时,字符会变为 Ã。使用同一张表,我可以看到某处有一些代码试图分别解释 C3 和 96(或作为 unicode \u 表示法)。 U+00C3 恰好是 Ã,96 不是可见字符,因此可以解释这一点。
现在我知道这是编码不匹配的典型案例,我只是不知道去哪里解决这个问题。
网页包含
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
调试时我可以看到导致错误解释的库是 jboss-el 2.0.0.GA,这似乎是正确的,因为该值在 webflow 表达式中被解析到后端:
<evaluate expression="rapportCriteria.addParameter('fw2', flowScope.fw2)" />
通过以下方式将其放到flowScope上:
<evaluate expression="requestParameters.fw2" result="flowScope.fw2"/>
不要介意将表单输入到后端的复杂方式,这是尝试将 Webflow 与 BIRT 报告集成的代码……但我在其他 Web 应用程序中也有相同的症状。
知道我必须从哪里开始寻找吗?
【问题讨论】:
标签: spring jsf character-encoding facelets spring-webflow