我在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。 请帮忙
答案 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编码,并在服务器上对其进行解码。