Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用GET请求在tomcat中保留utf-8字符编码_Java_Jakarta Ee_Tomcat_Utf 8 - Fatal编程技术网

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

Java 如何使用GET请求在tomcat中保留utf-8字符编码,java,jakarta-ee,tomcat,utf-8,Java,Jakarta Ee,Tomcat,Utf 8,在我的JSP中,我正在发送一个GET请求,其中包含一个名为jobDetails的参数,该参数包含一些中文字符[用URLEncoder.encode()编码]。现在在servlet的doGET()中,我需要将数据写入一个文件。当我这样做的时候 request.getParameter("jobDetails"); // this one retrieves wrong characters 此设置有一个解决方案,即中的URIEncoding=“UTF-8” <Connector port

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

request.getParameter("jobDetails"); // this one retrieves wrong characters
此设置有一个解决方案,即中的
URIEncoding=“UTF-8”

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


标签,但我们的架构师坚决不改变现有的Tomcat设置。我尝试设置一个过滤器,为请求内部doFilter()设置characterEncoding(),如中所述。但这只适用于POST请求。除了更改Tomcat设置,还有其他解决方案吗?我使用的是Tomcat 6和jdk 1.6。

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

我找到了一种方法。。。我从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");

如果与架构师争论听起来不好玩(而且也不好玩),的解析应该满足您的需要

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() ) );
        }
    }
}
publicstaticvoidmain(字符串[]args){
列表foo=null;
列表编码=数组.asList(“ISO-8859-1”、“UTF-8”);
for(字符串e:编码){
System.out.println(String.format(“解释为%s”,e));
foo=newarraylist();
解析(foo,新扫描程序(“作业详细信息=%C2%A2”),e);
对于(名称值对i:foo){
System.out.println(String.format(“%s有值%s”,i.getName(),i.getValue());
}
}
}
您仍然需要获取原始请求字符串才能传递给此方法,但这应该不会太困难。因为它是URL编码的,所以您不必担心编码,因为所有非ASCII字符都将被转义