2014-01-30 6 views
2

Я пытаюсь отправить японские символы на сервер API, но отправленные символы были искажены и стали ????. Поэтому я установить кодировку лица с помощью:Как отправить японские символы с помощью HttpPost

StringEntity stringEntity = new StringEntity(message, "UTF-8"); 

но выход стал [email protected]. Интересно, если преобразование stringEntity в строку вызвало это, так как я хочу отправить его на моем сервере как String.

Вот как я использовал его:

public static String postSendMessage(String path, String message) throws Exception { 
    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10000); // Timeout limit 
    HttpPost httpPost = new HttpPost(SystemInfo.getApiUrl() + path); 
    List<NameValuePair> value = new ArrayList<NameValuePair>(); 

    StringEntity stringEntity = new StringEntity(message, "UTF-8"); 
    value.add(new BasicNameValuePair("message", stringEntity.toString())); //Here's where I converted the stringEntity to string 

    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(value); 
    httpPost.setEntity(entity); 
    HttpResponse httpResponse = httpClient.execute(httpPost); 

    HttpEntity httpEntity = httpResponse.getEntity(); 
    InputStream is = httpEntity.getContent(); 

    String result = convertStreamToString(is); 
    return result; 
} 

Где я мог бы пойти не так?

ответ

7

Вам не нужно использовать StringEntity.

List<NameValuePair> value = new ArrayList<NameValuePair>(); 
value.add(new BasicNameValuePair("message", message)); 

Вместо этого вам необходимо передать второй аргумент для инициализации `UrlEncodedFormEntity.

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(value, "UTF-8"); 
+0

Спасибо, мой сервер принял символы. У меня есть связанный вопрос, хотя в моем приложении я не могу загружать файлы с японскими именами файлов, например, PDF с именем - は は は .pdf. Есть ли способ установить также кодировку для загрузки? [Здесь] (http://pastebin.com/NSTycJeu). –

+0

@ CompaqLE2202x: вы не показываете, откуда вы получаете 'url' или' pdfFilename', но в целом 'url', поскольку URI должен быть чистым ASCII. Если у вас есть IRI с символами, отличными от ASCII, вам необходимо сначала преобразовать это в URI; для части пути, которая выполняется посредством% -кодирования байтов UTF-8 для символов. 'URLEncoder.encode (имя файла,« UTF-8 »)' почти делает это (за исключением того, что оно ошибочно, вы можете заменить '+' на '% 20', чтобы исправить это). – bobince

+0

@bobince Фактически 'pdfFileName' - это просто имя файла с расширением, а url - путь [0]', например ('http: //192.168.xx.xx/resources/upload/pdf/ は は は .pdf '). Но когда я вложил его в браузер, он стал ('http: // 192.168.xx.xx/resources/upload/pdf /% E3% 81% AF% E3% 81% AF% E3% 81% AF.pdf'). Я преобразовал «путь [0]» в «URI», а затем в «URL», как вы сказали, но потом ничего не произошло. Я также попробовал «String urlEncoded = URLEncoder.encode (путь [0],« UTF-8 »);« но вызвал «Протокол не найден». Не могли бы вы просветить меня больше? –

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