java - Windows Server 2008 R2 的 Tomcat 7.0 HTTP post 请求 utf-8 问题

标签 java jsp tomcat utf-8 windows-server-2008-r2

我有一个非常奇怪的问题,我在 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”即可。请参见下图。

Tomcat 7 configuration

另外,您在 server.xml 文件中设置了 URIEncoding=UTF-8。

URI Encoding

关于java - Windows Server 2008 R2 的 Tomcat 7.0 HTTP post 请求 utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27452344/

相关文章:

java - 如何激活具有多个条件的 Eclipse UI 处理程序

java - 根据从 struts2 应用程序中的下拉列表中选择的值填充表

tomcat - "<Parameter>"与 Tomcat 上下文中的 "<Environment>"条目

java - 为selenium测试编写xpath以及它们之间的区别

java - "SQLException: Unwrap error"带有 JDBI 和 PGJDBC-NG Postgres 驱动程序

html - 使用外部 CSS 将 JSP 导出到 Word

javascript - Tomcat CORS : Preflight successful, 但实际请求因 403 禁止而失败

jsf - 在带有 Tomcat 的 netbeans 项目中使用 Bootsfaces

java - 是什么导致 ConcurrentHashMap 调整大小

java - 在JSP EL中生成序数字符