将带有 UTF-8 的字符从 Android 应用程序发送到服务器端
Posted
技术标签:
【中文标题】将带有 UTF-8 的字符从 Android 应用程序发送到服务器端【英文标题】:Send character with UTF-8 from Android app to server side 【发布时间】:2020-08-25 16:30:00 【问题描述】:我有一些带有以下标头的服务,我想在 android 应用程序中调用这些方法。我为调用服务编写了以下代码是正确的,但如果我在标题中添加charset=utf-8
,我会得到 400 错误代码。我应该以某些方法发送波斯字符,如果没有UTF-8
,我会在服务器端收到不正确的字符。无论如何,请发送您的建议以编辑我的代码。
另一个注意事项:我使用 PostMan 并将波斯字符发布到服务中,它显示正确的字符。
WCF 标头方法:
OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "Test")]
安卓代码:
this.jsonStringer=params[0].toString();
HttpPost request = new HttpPost(uri);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
StringEntity msg = new StringEntity(jsonStringer);
msg.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
msg.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
request.setEntity(msg);
response = httpClient.execute(request);
当我添加 request.setHeader("Content-type", "application/json; charset=utf-8");
时,我得到 400 错误代码!
【问题讨论】:
【参考方案1】:标头参数默认为 UTF8,但如果您尝试通过将参数放在正文中来传递参数,则应执行以下操作。
假设您已将非 utf8 字符串存储在 value1
中。首先使用 URLEncoder
将您的字符串转换为 utf8,然后将其添加到您的 jsonObject
并将其转换为正文。
这是一个示例代码,但在 Kotlin 中!
val jsonObject = JSONObject()
jsonObject.put(“param1”,val1)
val val1 = URLEncoder.encode(value1,”utf8”)
jsonObject.put(“param2”,val2) // and so on
val body = jsonObject.toString().toRequestBody(“application/json; charset=utf-8”.toMediaTypeOrNull())
重要通知
确保您的字符串不是 urf8,因为除非您从 ANSI txt 文件中读取它,否则它们是 Unicode,您不需要转换它们。如果您在服务器上没有看到应有的结果,那就是另一个问题了。
【讨论】:
【参考方案2】:这可能是你在request中设置的header和你在basicheader中设置的header不同造成的。你可以将它们的content-type设置为相同的格式。Java中的这个设置可以解决这个问题,你可以在你的程序中尝试一下。
public static void main(String args[]) throws ClientProtocolException, IOException
String json="\"user\":\"Email\":\"123\",\"Name\":\"sdd\",\"Password\":\"sad\"";
CloseableHttpClient httpClient=HttpClientBuilder.create().build();
HttpPost request = new HttpPost("http://localhost:8012/ServiceModelSamples/service/web/user");
request.setHeader("Accept", "application/json");
request.setHeader("Content-Type", "application/json;charset=utf-8");
StringEntity msg = new StringEntity(json);
msg.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json;charset=utf-8"));
msg.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,
"application/json"));
request.setEntity(msg);
HttpResponse response = httpClient.execute(request);
System.out.println(response);
【讨论】:
以上是关于将带有 UTF-8 的字符从 Android 应用程序发送到服务器端的主要内容,如果未能解决你的问题,请参考以下文章
将文本字符串从 android 应用程序发送到网站上的表单?