GET和POST的不同行为与德语" Umlaute"

时间:2014-05-03 18:54:02

标签: jsp tomcat post

我在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"%>

但我不明白为什么这两种变体的行为存在差异。 有解决方法吗?

1 个答案:

答案 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");
}