Отправка JSON из Android в .NET WCF с международными символами.Как? - PullRequest
1 голос
/ 24 июня 2011

Я получаю исключения, когда пытаюсь выполнить 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 или что-то еще?

1 Ответ

2 голосов
/ 24 июня 2011

Полагаю, вы должны указать кодировку UTF-8 при создании StringEntity:

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...