2015-12-19 2 views
1

Я пытаюсь выполнить простую передачу текста из моего приложения Android на мой сервер C# (asmx-сервер), отправив простейшую строку - и по какой-то причине она никогда не работает. Мой Android код выглядит следующим образом (предположим, что переменная «сообщение» содержит строку, как получил от EditText, что UTF-16, насколько я понимаю):Отправьте строку UTF-8 с Android на C#

httpClient = new DefaultHttpClient(); 
HttpPost post = new HttpPost(POST_MESSAGE_ADDRESS); 
byte[] messageBytes = message.getBytes("utf-8"); 
builder.addPart("message", new StringBody(messageBytes.toString())); 
HttpEntity entity = builder.build(); 
post.setEntity(entity); 
HttpResponse response = httpClient.execute(post); 

Так что я получаю что-то простое для мое сообщение, скажем, 10-байтовый массив. На моем сервере у меня есть функция, установленная для этого конкретного адреса; его код:

string message = HttpContext.Current.Request.Form["message"]; 
byte[] test = System.Text.Encoding.UTF8.GetBytes(message); 

Теперь после этой строки массива байт («Test») имеет точно такое же значение, как результат функции ToString() я позвонил в приложении. Вопрос в том, как преобразовать его в обычный текст UTF-8 для отображения?

Примечание. Я попытался отправить строку как строковое содержимое, но, насколько я понял, кодировка по умолчанию - ASCII, поэтому я получил много вопросительных знаков.

Edit: Теперь я ищу некоторые преобразования решений и пытаюсь их, но мой вопрос также, если есть более простой способ сделать это

ответ

2

(возможно BinaryBody в андроиде, или другая кодировка?) Проблема заключается в следующих строках:

byte[] messageBytes = message.getBytes("utf-8"); 
builder.addPart("message", new StringBody(messageBytes.toString())); 

Сначала вы трансформируют свой UTF-16 строку message в UTF-8 кодируются messageBytes только конвертировать их обратно в UTF-16 строку в следующей строке. И там вы используете конструктор StringBody, который по умолчанию будет использовать кодировку ASCII.

Вы должны заменить эти строки с:

builder.addPart("message", new StringBody(message, Charset.forName("UTF-8"))); 
+0

Спасибо так много! Очень быстро и полезно :) – FitzChivalry

Смежные вопросы