项目部署到服务器后字符编码,将UTF-8编码的数据发布到服务器会丢失某些字符...

将UTF-8编码的数据发布到服务器会丢失某些字符

我正在从事包括服务器(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 nameValuePairs = new ArrayList();

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;

}

我的猜测是问题出在BasicNameValuePair中,我用于将XML设置为POST参数之一,并且其文档说它使用US-ASCII字符集。 发送UTF-8编码的POST字段的正确方法是什么?

6个解决方案

100 votes

经过大量研究并尝试使事情正常进行,我终于找到了解决该问题的方法,它是对现有代码的简单补充。 解决方案是在UrlEncodedFormEntity类构造函数中使用参数“ UTF-8”:

form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");

更改之后,字符被编码并正确地传递到服务器端。

dstefanox answered 2020-08-10T07:37:24Z

21 votes

当你做这行

form = new UrlEncodedFormEntity(nameValuePairs);

您需要像这样指定字符集

form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");

您可以转到Android Developer进行查找。

使用默认列表DEFAULT_CONTENT_CHARSET的参数列表构造一个新的UrlEncodedFormEntity

BobGao answered 2020-08-10T07:37:58Z

3 votes

String finalString = URLEncoder.encode(request, "UTF-8");

return finalString;

用户postString在您的post方法中。

AZ_ answered 2020-08-10T07:38:18Z

1 votes

或者,我可以在test2.jspx顶部的scriptlet中添加以下代码,以解决该问题

String en = request.getCharacterEncoding();

if(en == null) {

request.setCharacterEncoding("UTF-8");

}

Amol Gaikwad answered 2020-08-10T07:38:38Z

0 votes

我也面临类似的问题。 但是为了验证这一点,我在下面编写了两个JSP

------------- test1.jspx -----------------

xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

-------------test2.jspx-----------------

xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

The test entered is request.getParameter("u")

----------------------------------

然后在第一个输入框中的重音字符下方输入墨西哥

这个问题很明显,Android浏览器无法处理UTF-8编码在POST参数中。

我认为,我将需要使用GET方法,并且需要为tomcat server.xml中的连接器添加“ URIEncoding = UTF-8”。

Amol Gaikwad answered 2020-08-10T07:39:16Z

0 votes

这是从Android发送UTF-8数据时遇到的问题。 您的代码可以正常工作,除了必须将3004924734221051059072编码为Base64之外。 在服务器PHP上,您只需解码回Base64字符串即可。 它为我工作。 如果您需要代码,我可以分享。

Mukund K Roy answered 2020-08-10T07:39:36Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值