【问题标题】:Sending JSON from Android to .NET WCF with international characters. How?使用国际字符将 JSON 从 Android 发送到 .NET WCF。如何?
【发布时间】:2011-09-22 05:20:23
【问题描述】:

我在尝试 POST 时遇到异常,并且我的 JSON 包含一些国际字符。

这是我使用的代码:

HttpPost request = new HttpPost(serviceURL + url);
            request.addHeader("Authorization", "Basic " + Preferences.getAuthorizationTicket(mContext));
            request.addHeader("DeviceSerialNumber", Utility.getDeviceSerialNumber(mContext));
            request.addHeader("OSVersion", "Android v" + Build.VERSION.RELEASE);

            StringEntity entity = new StringEntity(requestData);
            entity.setContentType("application/json;charset=UTF-8");
            entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
            request.setEntity(entity);

            ResponseHandler<String> handler = new BasicResponseHandler();
            response.Body = mHttpClient.execute(request, handler);
            response.Code = HttpURLConnection.HTTP_OK;
            response.Message = "OK";

这是我得到的错误:

org.apache.http.client.HttpResponseException: 错误请求 org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:71) 在 org.apache.http.impl.client.BasicResponseHandler.handleResponse(BasicResponseHandler.java:59) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:657) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627) 在 org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616) 在 com.idatt.common.AsyncProcessor.processPOST(AsyncProcessor.java:550) 在 com.idatt.common.AsyncProcessor.PostMail(AsyncProcessor.java:367) 在 com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:120) 在 com.idatt.common.AsyncProcessor.doInBackground(AsyncProcessor.java:28) 在 android.os.AsyncTask$2.call(AsyncTask.java:185) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 在 java.util.concurrent.FutureTask.run(FutureTask.java:137) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 在 java.lang.Thread.run(Thread.java:1096)

当 requestData 没有任何国际(俄语、波兰语等)字母时,它可以正常工作。我想念什么?或者更好的是如何从 Fiddler 或其他东西中捕获的模拟器获取流量?

【问题讨论】:

    标签: android json internationalization


    【解决方案1】:

    我认为您应该在创建 StringEntity 时指定 UTF-8 字符集:

    StringEntity entity = new StringEntity(requestData,"utf-8");
    

    http://developer.android.com/reference/org/apache/http/entity/StringEntity.html#StringEntity(java.lang.String, java.lang.String)

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 2016-11-09
      • 2011-09-16
      相关资源
      最近更新 更多