我有一个非常奇怪的问题,我在Tomcat 7.0实例上有一个Web应用程序(JSP文件)。我无法弄清楚为什么它没有正确发送POST UTF-8请求。 我已经在Windows Server 2008 R2上安装了它。我已在server.xml和web.xml中配置了所有必需的设置,例如URIEncoding = UTF-8用于标记,并在web.xml中设置过滤器。
在我的JSP中,我正在调用一个接受POST方法的.Net Web服务:private String urlcallPOST(String content){
String result="";
try
{
String urlParameters = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+
"<SOAP-ENV:Envelope"+
" xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""+
" xmlns:ns1=\"http://tempuri.org/\">"+
" <SOAP-ENV:Body>"+
" <ns1:Message>"+
" <ns1:contentList>"+
" <ns1:string>"+content+"</ns1:string>"+
" </ns1:contentList>"+
" </ns1:Message>" +
" </SOAP-ENV:Body>" +
"</SOAP-ENV:Envelope>";
URL url = new URL("http://theIP/webservice.asmx");
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-Type","text/xml; charset=utf-8");
connection.setRequestProperty("SOAPAction", "\"http://tempuri.org/Message\"");
byte[] buf = urlParameters.getBytes();
DataOutputStream os = new DataOutputStream(connection.getOutputStream());
os.write(buf, 0, buf.length);
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
os.close();
}
catch(Exception e)
{
}
return result;
}
我使用了元标记并定义了charset = utf-8并且还使用了:
request.setCharacterEncoding("UTF-8");
在任何请求之前。 我在tomcat 7.0.57中的webapps中创建了一个名为GetMine的文件夹。并在那里复制了这个jsp文件。当我使用content =&#34; 调用urlCallPOST方法时,一些utf-8阿拉伯语文本&#34;它在stdout文件中的Tomcat的日志文件夹中显示 ???? 。
奇怪的是,当我在 ECLIPSE 中创建一个java项目(不是j2ee或静态网页)并调用urlcallPOST时。它工作正常。
当我看到ECLIPSE的结果很好时,决定安装 WireShark 数据包捕获工具并检查结果,并惊讶地发现当从ECLIPSE执行代码时,wireshark以这种格式显示了这些阿拉伯字符:\ 330 \ 263 \ 330 \ 264等,webservice也返回正确的响应。但是当我从执行它的JSP检查时,wireshark以这种格式显示那些阿拉伯字符: ?????
我用谷歌搜索,发现这个网站显示了这些阿拉伯语编码:http://www.acc.umu.se/~saasha/charsets/?charset=iso_8859-4&charset=cp1256
我尝试在我的urlCallPOST方法的内容标记内硬编码 \ 330 \ 263 \ 330 \ 264 ,但它仍然没有显示正确的字符(某些字符显示正确! !!!)
我该怎么办?对于Windows Server 2008 R2的编码,这是错误/错误吗? 我在Solaris和JBOSS tomcat中有这个确切的配置,它工作正常。
答案 0 :(得分:1)
最后我找到了解决方案。 你需要在tomcat的配置中添加一个小配置: 添加“-Dfile.encoding = UTF-8”,这就是全部。见下图。
此外,您已在server.xml文件中设置URIEncoding = UTF-8。