我在Apache Tomcat 7.0.41上使用JSP,并希望将Form-Data传输到另一个页面。
出于某些原因,如果我使用GET,德语“Umlaute”会起作用,但如果我使用POST则不行。 例子:
@€ - > @â¬
äöüß - > äöüÃ
Österreich - > Ãsterreich
所以我写了一个小脚本,它使用推荐的encodeURIComponent()
- JS-Function:
function onsubmitfu() {
tas = document.getElementsByTagName('textarea');
for (index = 0; index < tas.length; index++) {
tas[index].innerHTML = encodeURIComponent()(tas[index].innerHTML);
}
tas = document.getElementsByTagName('input');
for (index = 0; index < tas.length; index++) {
tas[index].value = encodeURIComponent(tas[index].value);
}
}
嗯,它“改变”......
äöü߀ - &gt; äöüÃâ¬
互联网上的一些消息来源更喜欢escape()
,所以我试了一下它的工作方式,但是错误的一面......现在JSP-Page收到了:
äöü߀ - &gt; %E4%F6%FC%DF%u20AC
这看起来应该如何查看我猜的URL ...
两个页面都使用
<%@page contentType="text/html" pageEncoding="UTF-8"%>
但我不明白为什么这两种变体的行为存在差异。 有解决方法吗?
答案 0 :(得分:1)
您的Tomcat服务器是否设置为处理UTF8字符?这就是我在Ubuntu 12.04上的Tomcat 6中的表现。这应该可以让您了解如何处理。
首先,我打开主要的Tomcat服务器XML文件,如下所示:
sudo nano /etc/tomcat6/server.xml
然后我查找<Connector
部分并确保其中包含URIEncoding="UTF-8"
。默认情况下看起来像这样:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
但是当你向它添加URIEncoding="UTF-8"
时应该看起来像这样:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
然后重新启动Tomcat 6:
sudo service tomcat6 restart.
看看会发生什么。另外,请参阅this question and answer thread中的建议。这个程序化的答案似乎解决了这个问题:
if(request.getCharacterEncoding() == null) {
request.setCharacterEncoding("UTF-8");
}