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

nx7onnlm  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(136)

在JSP中,我发送一个GET请求,其中包含一个名为jobDetails的参数,该参数包含一些中文字符[用URLEncoder.encode()编码]。

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

对于此设置,有一个解决方案,即

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

标签,但我们的架构师是地狱弯曲在不改变现有的tomcat设置。我尝试设置一个过滤器,以设置字符编码()为request在doFilter()中提到的。但这一个只适用于POST请求。有没有其他的解决方案,除了改变Tomcat的设置?我使用的是Tomcat 6和jdk 1.6。

liwlm1x9

liwlm1x91#

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

5lhxktic

5lhxktic2#

如果与架构师争论听起来不太有趣(事实上也确实如此),那么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字符都将被转义。

hl0ma9xz

hl0ma9xz3#

您不需要外部库。只需使用String.getBytes():

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

1hdlvixo4#

我找到了一种方法......我从org.springframework.web-3.0.0.RELEASE.jar导入了org.springframework.web.bind.ServletRequestUtils类,并使用以下内容解析“request”对象中的参数“jobDetails”:

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

相关问题