如何使用GET请求在tomcat中保留utf-8字符编码

时间:2012-03-01 13:39:34

标签: java java-ee tomcat utf-8

在我的JSP中,我发送一个带有 jobDetails 参数的GET请求,该参数包含一些中文字符[用URLEncoder.encode()编码]。现在在我的servlet的doGET()中,我需要将数据写入文件。当我做的时候

request.getParameter("jobDetails"); // this one retrieves wrong characters

此设置的解决方案是{/ 1}}

 URIEncoding="UTF-8"
Tomcat的

标签,但我们的架构师不会改变现有的tomcat设置。我尝试设置过滤器,用于在BalusC's blog中提到的doFilter()中为请求设置characterEncoding()。但是这个仅适用于POST请求。除了更改Tomcat设置之外,还有其他解决方案吗?我正在使用Tomcat 6和jdk 1.6。

3 个答案:

答案 0 :(得分:4)

抱歉,您将不得不告诉您的架构师,有时候,更改配置是唯一的选择,这是其中之一。要在Tomcat中支持URL参数中的UTF-8字符,您需要将该设置添加到连接器。

答案 1 :(得分:0)

如果与建筑师争论听起来不那么有趣(而且它没有),URLEncodedUtils的解析应该做你需要的。

public static void main( String[] args ) {
    List<NameValuePair> foo = null;
    List<String> encodings = Arrays.asList( "ISO-8859-1", "UTF-8" );

    for ( String e : encodings ) {
        System.out.println( String.format( "Interpreting as %s", e ) );
        foo = new ArrayList<NameValuePair>();
        URLEncodedUtils.parse( foo, new Scanner( "jobdetails=%C2%A2" ), e );

        for ( NameValuePair i : foo ) {
            System.out.println( String.format( "%s had value %s", i.getName(), i.getValue() ) );
        }
    }
}

您仍然需要将原始请求字符串传递给此方法,但这不应该太困难。由于它是URL编码的,因此您不必担心编码,因为所有非ASCII字符都将被转义。

答案 2 :(得分:-1)

我找到了某种方式......我从 org.springframework.web-3.0.0.RELEASE.jar 导入了 org.springframework.web.bind.ServletRequestUtils 类,并使用以下方法解析参数'jobDetails 'from'request'对象:

String jobDetails = new String((ServletRequestUtils.getStringParameter(request, "jobDetails")).getBytes("ISO-8859-1"), "UTF-8");