2014-10-21 5 views
0

Я пытаюсь отправить специальные символы через HTTP-запрос, теперь я использую Loopj в качестве моего http-клиента. Проблема в том, что когда я пытаюсь послать специальные символы, то есть «áéíóú», запрос исчезает с символами «· ÈÌÛ˙», это вызывает некоторые проблемы на стороне сервера.Loopj messing специальные символы перед отправкой их по запросу

Я прошел через код Loopj и не смог найти ничего относительно перекодировки моей строки или чего-то подобного. В худшем случае кажется, что он будет кодироваться в UTF-8, который фактически поддерживает эти символы.

Надеюсь, что кто-то может помочь.

С наилучшими пожеланиями.

+0

Я считаю, что венгерские символы испорчены из-за несоответствия кодировки. –

+0

укажите код, который создает HTTP-запрос. – slf

+0

Пожалуйста, включите код, чтобы мы могли вам помочь – Hamad

ответ

0

Почему вы не использовать этот подход:

HttpParams httpParameters = new BasicHttpParams(); 
HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8); 
HttpProtocolParams.setHttpElementCharset(httpParameters, HTTP.UTF_8); 

HttpClient client = new DefaultHttpClient(httpParameters); 
client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1); 
client.getParams().setParameter("http.socket.timeout", new Integer(2000)); 
client.getParams().setParameter("http.protocol.content-charset", HTTP.UTF_8); 
httpParameters.setBooleanParameter("http.protocol.expect-continue", false); 
HttpPost request = new HttpPost("http://www.server.com/some_script.php?sid=" + String.valueOf(Math.random())); 
request.getParams().setParameter("http.socket.timeout", new Integer(5000)); 

List<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
// you get this later in php with $_POST['value_name'] 
postParameters.add(new BasicNameValuePair("value_name", "value_val")); 

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters, HTTP.UTF_8); 
request.setEntity(formEntity); 
HttpResponse response = client.execute(request); 

in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
StringBuffer sb = new StringBuffer(""); 
String line = ""; 
String lineSeparator = System.getProperty("line.separator"); 
while ((line = in.readLine()) != null) { 
    sb.append(line); 
    sb.append(lineSeparator); 
} 
in.close(); 
String result = sb.toString(); 

Пользователи выше кода говорит, этот код работает как шарм. И я думаю, что если вы столкнулись с проблемами с вашим подходом, тогда вы должны изменить свой подход к решению своей проблемы. Посмотри эту ссылку, которая вам полезна: Android default charset when sending http post/put - Problems with special characters

+0

Да, использование вышеуказанного метода может работать, но это не то, о чем спрашивал ОП; они хотели знать, как решить проблему, используя AsyncHttpClient; а не домашним прокатом. Возможно, OP должен использовать LoopJ? Например, я использую LoopJ в своих проектах и ​​испытываю ту же проблему. Я не буду переписывать весь свой код API, когда LoopJ должен иметь возможность справиться с этим. – SuperStubbs

3

Я предполагаю, что вы имеете в виду библиотеку AsyncHttpClient, правильно?

AHC по умолчанию кодирует все операции ввода-вывода в UTF-8. Из-за отсутствия исходного кода, я хотел бы указать вам, чтобы исследовать следующее:

  1. Что такое кодирование на входе? Убедитесь, что он находится в UTF-8.
  2. Вы используете вход через фильтр / который может изменить его кодировку? Убедитесь, что фильтр/функция также создает UTF-8.
  3. Перед проверкой того, что на самом деле получает ваш бэкэнд, измените свой клиент на , отправьтеhttp://httpbin.org/post, а затем проверьте результат.
  4. Если вы получаете правильное представление в httpbin и плохого представления в вашем внутреннем интерфейсе, проблема НЕ в ОГСЕ, но в вашем внутреннем интерфейсе.
  5. Если вы получаете плохие представления в обоих httpbin и внутреннего интерфейса, то данные, отправляемые был изначально плохо или в неправильной кодировке.

Я надеюсь, что это поможет вам быстро найти проблему.