如何检测传递给Tomcat应用程序的无效UTF-8字符串?

时间:2014-02-26 22:15:38

标签: java tomcat utf-8

在测试新的网络应用时,我碰巧将另一个浏览器窗口中的字符串剪切并粘贴到我的网络应用的输入表单中。该字符串中包含特定字符,单个close-quote(字节值146,十六进制92)。您可以通过转到Yelp并查看公司名称来查看角色:

Martin’s Auto Repair.

正确剪切和粘贴角色,但是当我提交表单时,它被破坏了:

Martinâs Auto Repair

随后的提交增加了重复:

MartinâÂÂs Auto Repair
MartinâÃÂÃÂs Auto Repair
MartinÃÂâÃÂÃÂÃÂÃÂs Auto Repair

我的JSP页面,我的Tomcat服务器和我的应用程序都设置为使用UTF-8,因此它似乎正在尝试将此字符作为UTF-8多字节字符的第一个字符读取并以某种方式对其进行修改。

当然,我很想知道这些错综复杂的内容,但我对阻止这种行为更感兴趣。

任何人都知道如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

Jon真的是对的。处理链中的某个位置,您无法正确处理unicode字符,因此需要更多信息。话虽这么说,我只能想到tomcat上正常的servlet / JSP流程中的两个地方你需要检查它,所以我会尝试一个答案:

首先,检查你的tomcat配置。 http connectorURIEncoding属性需要设置为UTF-8。使用此set,应正确解码传递给servlet的字符串。您可能希望暂时记录您获得的值,以便在此处验证它是否正确。

其次,检查JSP页面输出的字符编码。我相信 JSP的默认编码应该处理unicode但是值得检查来自浏览器的headers / html,因为这也可能是你的问题。

这两者中的任何一个都可能导致您遇到的问题。除非您或您正在使用的框架在某处进行编码/解码,否则这应该可以解决您的问题。