我有一个非常奇怪的问题,我在 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;
}
我使用了 meta 标签并定义了 charset=utf-8 并且还使用了:
request.setCharacterEncoding("UTF-8");
在任何请求之前。 我在 tomcat 7.0.57 中的 webapps 中创建了一个名为 GetMine 的文件夹。并将此 jsp 文件复制到那里。当我使用 content="some utf-8 Arabic text"调用 urlCallPOST 方法时,它会在 stdout 文件中的 Tomcat 日志文件夹中显示 ????。
奇怪的一点是,当我在 ECLIPSE 中创建一个 java 项目(不是 j2ee 或静态 web)并调用 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 中有这个确切的配置,它工作正常。
最佳答案
终于找到解决办法了。 您只需要在 tomcat 的配置中添加一点配置: 添加“-Dfile.encoding=UTF-8”即可。请参见下图。
另外,您在 server.xml 文件中设置了 URIEncoding=UTF-8。
关于java - Windows Server 2008 R2 的 Tomcat 7.0 HTTP post 请求 utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452344/