apache httpclient和servlet的char编码问题

时间:2011-06-09 08:39:58

标签: servlets character-encoding

我在http客户端post techniq和servlet之间进行通信。 如果我发英文字符没有问题,但如果我发送希伯来语我得到?????而不是希伯来语,我使用UTF-8。 这是客户的代码

HttpPost post = new HttpPost("http://localhost:8080/dropboxweb/Delete");
            try {

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                        3);
                nameValuePairs.add(new BasicNameValuePair("fullpath",full.toString()));
                nameValuePairs.add(new BasicNameValuePair("filename",name));
                nameValuePairs.add(new BasicNameValuePair("user",Config.getInstance().getUsername()));

                post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = client.execute(post);

这是servlet

//response.setContentType("text/html;charset=windows-1255");
        //response.setContentType("text/html;charset=UTF-8");

        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        final String full_path =  request.getParameter("fullpath");

我尝试了所有的optinos //无效。 我正在使用tomcat 7。 请帮忙

3 个答案:

答案 0 :(得分:0)

参考这个,(它帮助了我) 你能推荐什么才能让一切顺利? (如何在任何地方使用UTF-8) http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3

答案 1 :(得分:0)

在客户端,您需要确保以下字符串有效

nameValuePairs.add(new BasicNameValuePair("fullpath", full.toString()));
nameValuePairs.add(new BasicNameValuePair("filename", name));
nameValuePairs.add(new BasicNameValuePair("user", Config.getInstance().getUsername()));

通过

检查
System.out.println("fullpath: " + full.toString());
System.out.println("filename: " + name);
System.out.println("user: " + Config.getInstance().getUsername());

在服务器端,您需要确保在任何请求参数之前之前调用以下行

request.setCharacterEncoding("UTF-8");

您还需要确保在流程的剩余部分中将检索到的值视为UTF-8。例如。在写入文件,打印到stdout控制台或插入数据库时​​,还需要指示所有这些作业都使用UTF-8。

另见:

答案 2 :(得分:0)

据我所知,当前的[RFC 1521]语法将参数值(以及文件名)限制为US-ASCII。 您应该对客户端上的文件名进行URL编码,并在服务器上对其进行解码。