2012-06-05 9 views
11

Estoy cargando una cadena grande al servicio web. La cadena contiene un nuevo carácter de línea que se escribe como "\ n". Los datos se ve algo como:comportamiento ambiguo del nuevo carácter de línea

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 

los datos anteriores se almacena en la cadena JsonArrObj. Para cargar los datos/cadena, estoy usando el siguiente código:

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 cadena se ha cargado correctamente. El problema al que me enfrento es: mientras la cadena se convierte a jsonParams, el "\n" en los datos de cadena se convierte a "\\n" como resultado, en el lado del servidor, muestra una pequeña casilla en lugar de nueva línea.

Cuando abro esta cadena en la aplicación NOTEPAD, muestra cuadros pequeños. Pero cuando lo abro en la aplicación WORDPAD, el texto se muestra en una nueva línea. De acuerdo a mí, podría haber ingresado el "tipo de contenido" correcto o la codificación. Por favor sugiere una solución para el mismo.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); dio error al subir en sí ...

Los datos que se envía en el jsonParams- jsonArrObj finalmente parece:

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

¿Has intentado poner un "\" extra delante de "\ n"? eso es "\\ n" en lugar de "\ n"? –

+0

@ V.P.Verma, si pongo un "\\ n", no podré mostrar el texto en la vista web. Además, el problema es preservar el "\ n" tal como está. El codificador está convirtiendo el "\ n" en "\\ n" no deseado. – Pallavi

+0

@ user370305 sí .. – Pallavi

Respuesta

0

Hey ¿por qué no utilizar los valores Unicode para \ n como y cualquier otro carácter que esté creando este problema así U + 002FU + 006E

+0

bien ... lo intentaré. – Pallavi

1

Bueno, el codificador escapa de sus caracteres de nueva línea. Si desea transportar caracteres nuevos de línea nueva, puede codificar toda la secuencia con base64. Si su sistema operativo objetivo (para los datos a enviar) es Windows, entonces debería usar \ r \ n, si mac entonces \ rsi unix \ linux entonces \ n. Después de codificar los datos, intente enviar el codificado y decodifíquelo en el otro lado. Para base64, el Sr. Google lo convencerá.

Cuestiones relacionadas