2012-06-05 3 views
11

Sto caricando una stringa di grandi dimensioni sul servizio web. La stringa contiene un nuovo carattere di linea che è scritto come "\ n". I dati sembra qualche cosa come:comportamento ambiguo del carattere di nuova riga

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 

i dati di cui sopra sono memorizzati nella stringa JsonArrObj. Per caricare i dati/stringa, sto usando il seguente codice:

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

La stringa è stata caricata correttamente. Il problema che sto affrontando è: mentre la stringa viene convertita in jsonParams, lo "\n" nei dati di stringa viene convertito in "\\n" di conseguenza, sul lato server, mostra una piccola casella invece di una nuova riga.

Quando si apre questa stringa nell'applicazione NOTEPAD, vengono visualizzati piccoli riquadri. Ma quando lo apro nell'app WORDPAD, il testo viene visualizzato su una nuova riga. Secondo me, potrei aver inserito "content-type" o encoding corretti. Si prega di suggerire una soluzione per lo stesso.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); ha dato errore durante il caricamento stesso ...

I dati che vengono inviati nel jsonParams- jsonArrObj finalmente si presenta come:

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

hai provato a mettere un extra "\" davanti a "\ n"? questo è "\\ n" invece di "\ n"? –

+0

@ V.P.Verma, se metto un "\\ n", non sarò in grado di visualizzare il testo nella visualizzazione web. Inoltre, il problema è di conservare "\ n" così com'è. Il codificatore sta convertendo "\ n" in "non desiderato" "\\ n" .. – Pallavi

+0

@ user370305 sì .. – Pallavi

risposta

0

Hey perché non utilizzare i valori Unicode per \ n come e qualsiasi altro carattere che sta creando questo problema come questo U + 002FU + 006E

+0

ok ... ci provo. – Pallavi

1

Bene, l'encoder sfugge ai caratteri di nuova riga. Se si desidera trasportare correttamente i caratteri di nuova riga, è possibile codificare l'intero flusso con base64. Se il tuo OS di destinazione (per i dati da inviare) è Windows, dovresti usare \ r \ n, se mac allora \ r se unix \ linux then \ n. Dopo aver codificato i dati, prova a inviare la codifica e decodificarla sull'altro lato. Per base64 Mr. Google ti convincerà.