2012-06-05 14 views
11

Wysyłam duży ciąg do serwisu internetowego. Ciąg zawiera nowy znak linii, zapisany jako "\ n". Dane wygląda trochę coś takiego:niejednoznaczne zachowanie nowego znaku linii

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 

powyższe dane są przechowywane w ciąg JsonArrObj. Aby przesłać dane/ciąg znaków, używam następującego kodu:

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(); 
    } 

Ciąg jest ładowany pomyślnie. Problem, przed którym stoję, to: podczas konwersji łańcucha znaków na jsonParams, "\n" w danych ciągu zostaje przekonwertowany na "\\n" w wyniku, po stronie serwera pokazuje małe pole zamiast nowej linii.

Po otwarciu tego ciągu w aplikacji NOTEPAD wyświetla małe pola. Ale kiedy otworzę go w aplikacji WORDPAD, tekst zostanie wyświetlony w nowej linii. Według mnie mógłbym wprowadzić poprawny "typ zawartości" lub kodowanie. Proszę zaproponować rozwiązanie tego samego.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); dał błąd podczas przesyłania sobie ...

danych, które są wysyłane w jsonParams- jsonArrObj wreszcie wygląda następująco:

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 
+1

czy próbowałeś umieścić dodatkowe "\" przed "\ n"? to jest "\\ n" zamiast "\ n"? –

+0

@ V.P.Verma, jeśli wstawię "\\ n", nie będę mógł wyświetlić tekstu w widoku sieci. Problem polega również na zachowaniu "\ n" w niezmienionej postaci. Koder konwertuje "\ n" na niezamierzony "\\ n" .. – Pallavi

+0

@ user370305 tak .. – Pallavi

Odpowiedz

0

Hej, dlaczego nie użyć wartości Unicode dla \ n jako i każda inna postać, która tworzy ten problem podobnie jak to U + 002FU + 006E

+0

ok ... spróbuję. – Pallavi

1

Cóż, koder ucieka przed znakami nowej linii. Jeśli chcesz poprawnie transportować znaki nowej linii, możesz zakodować cały strumień za pomocą base64. Jeśli twoim celem (dla danych do wysłania) jest Windows, powinieneś użyć \ r \ n, jeśli mac to \ r, jeśli unix \ linux to \ n. Po zakodowaniu danych spróbuj wysłać kodowane i dekodować je po drugiej stronie. Dla base64 Pan Google przekona cię.

Powiązane problemy