Ниже приведен код, который я использую для отправки SOAP-запросов в моем приложении для Android, и он отлично работает со всеми запросами, кроме одного. Этот код генерирует IOException: Content-length превысила по адресу wr.flush();
, когда есть китайские символы в переменной requestBody
.Метод сброса OutputStreamWriter бросает IOException при попытке писать китайские символы
Содержание длины в этом случае 409
URL url = new URL(Constants.HOST_NAME);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// Modify connection settings
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
connection.setRequestProperty("SOAPAction", soapAction);
String requestBody = new String(soapRequest.getBytes(),"UTF-8");
int lngth = requestBody.length();
connection.setRequestProperty("Content-Length", (""+lngth));
// Enable reading and writing through this connection
connection.setDoInput(true);
connection.setDoOutput(true);
// Connect to server
connection.connect();
OutputStreamWriter wr = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
wr.write(requestBody);
wr.flush();
wr.close();
Любой ключ, что происходит не так, когда есть китайские символы в строке?
EDIT: Я удалил заголовочное поле «content-lenght», и оно работает, но почему?
спасибо, это разъяснение помогло. Я из C/C++ фона и никогда не понял, что java имеет 16-битный тип char :) –