Подтвердить что ты не робот

Неоднозначное поведение нового символа линии

Я загружаю большую строку в веб-сервис. Строка содержит новый символ строки, который записывается как "\n". Данные выглядят примерно так:

 05/06/2012 11:35:43 AM- DB exists, transferring data\n05/06/2012
 11:48:20 AM- loadUserSpinners, cursor.getCount()=2\n05/06/2012
 11:48:20 AM- Battery: 50%\n05/06/2012 11:48:20 AM- ITEM SELECTED: 0

вышеуказанные данные сохраняются в строке JsonArrObj. Чтобы загрузить данные/строку, я использую следующий код:

    HttpParams httpParameters = new BasicHttpParams();
    int timeoutConnection = 360000; //6 minutes
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
    int timeoutSocket = 420000; //7 minutes
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
    HttpClient httpClient = new DefaultHttpClient(httpParameters);

    JSONArray jsonParams = new JSONArray();
    Object[] params={IPAddress,Database,DbName,DbPassword,JsonArrObj};
    for (int i = 0; i < params.length; i++) {
        jsonParams.put(params[i]);
    }

    JSONObject jsonRequest = new JSONObject();
    jsonRequest.put("id", Id);
    jsonRequest.put("method", FunctionName);
    jsonRequest.put("params", jsonParams);
    JSONEntity entity = new JSONEntity(jsonRequest);
    entity.setContentType("application/json; charset=utf-8");       
    HttpPost request = new HttpPost(URL);
    request.setEntity(entity);

    HttpResponse response = httpClient.execute(request);
    StatusLine statusLine = response.getStatusLine();
    int statusCode = statusLine.getStatusCode();
    if (statusCode == 200) {
        HttpEntity httpEntity = response.getEntity();
        InputStream content = httpEntity.getContent();

        BufferedReader reader = new BufferedReader(
                new InputStreamReader(content,"iso-8859-1"),8);
        String line;
        while ((line = reader.readLine()) != null) {
            builder.append(line);

            LogE("result line: "+line);
            String str=convertString(line);
            parseJson(str);
        }
        content.close();
    }

Строка загружается успешно. Проблема, с которой я столкнулся, заключается в следующем: в то время как строка преобразуется в jsonParams, "\n" в строковых данных преобразуется в "\\n", в результате на стороне сервера отображается небольшая коробка вместо новой строки,

Когда я открываю эту строку в приложении NOTEPAD, она отображает небольшие поля. Но когда я открываю его в приложении WORDPAD, текст отображается в новой строке. По-моему, я мог бы ввести корректный "контент-тип" или кодировку. Пожалуйста, предложите решение для этого же.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); дал ошибку при загрузке себя...

Данные, которые отправляются в jsonParams- jsonArrObj, выглядят следующим образом:

05\/06\/2012 04:05:52 PM- DB exists, transferring
data\\n05\/06\/2012 04:32:56 PM- loadUserSpinners,
cursor.getCount()\\u003d2\\n05\/06\/2012 04:32:56 PM- Battery:
50%\\n05\/06\/2012 04:32:56 PM- ITEM SELECTED: 0
4b9b3361

Ответ 1

Ну, кодер избегает ваших символов новой строки. Если вы хотите правильно переносить символы новой строки, вы можете кодировать весь поток с помощью base64. Если ваша целевая os (для отправки данных) - это Windows, тогда вы должны использовать \r\n, если mac then\r, если unix\linux then\n. После кодирования данных попробуйте отправить закодированные и декодировать их с другой стороны. Для base64 г-н Google убедит вас.

Ответ 2

Эй, почему бы вам не использовать значения Unicode для \n как и любого другого символа, создающего эту проблему? как это U + 002FU + 006E