【发布时间】:2023-03-26 15:30:01
【问题描述】:
我正在从事的项目包括服务器(JavaEE 应用程序)和客户端(Android 应用程序)的通信。 XML 作为 HTTP 请求的 POST 参数之一发送(名为“xml”)。我传递给服务器的其他 POST 参数也很少,但在下面的函数中,为了简单起见,我删除了它们。出现的问题是某些字母没有正确传递到服务器 - 例如字符Ű(注意这不是德语Ü,顺便说一下,它是正确传递的)。发送代码如下:
private String postSyncXML(String XML) {
String url = "http://10.0.2.2:8080/DebugServlet/DebugServlet";
HttpClient httpclient = new DefaultHttpClient();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("xml",XML));
UrlEncodedFormEntity form;
try {
form = new UrlEncodedFormEntity(nameValuePairs);
form.setContentEncoding(HTTP.UTF_8);
HttpPost httppost = new HttpPost(url);
httppost.setEntity(form);
HttpResponse response = (HttpResponse) httpclient .execute(httppost);
HttpEntity resEntity = response.getEntity();
String resp = EntityUtils.toString(resEntity);
Log.i(TAG,"postSyncXML srv response:"+resp);
return resp;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我的猜测是问题出在我用来将 XML 设置为 POST 参数之一的 BasicNameValuePair 中,并且它的文档说它使用 US-ASCII 字符集。发送 UTF-8 编码的 POST 字段的正确方法是什么?
【问题讨论】:
-
能否请您发布 form.toString();设置 contentEncoding 后?获得 nameValuePairs 列表的完整打印输出也很有用。我想如果我们看看这两个,我们就能看出问题所在。
-
它不像使用 form.toString() 来获取内容的编码方式那么简单,但结果如下:不是将提到的字母编码为字节序列“C5 B0”,而是编码作为“1A”。所以,似乎表单没有正确编码这个字符......
-
这个解决方案可以解决我的问题,试试这个:stackoverflow.com/a/6228377/1929078
标签: android xml utf-8 special-characters