Java 如何使用GET请求在tomcat中保留utf-8字符编码
在我的JSP中,我正在发送一个GET请求,其中包含一个名为jobDetails的参数,该参数包含一些中文字符[用URLEncoder.encode()编码]。现在在servlet的doGET()中,我需要将数据写入一个文件。当我这样做的时候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
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字符都将被转义