2012-06-05 33 views
11

Tôi đang tải một chuỗi lớn lên dịch vụ web. Chuỗi chứa ký tự dòng mới được viết là "\ n". Dữ liệu trông giống như sau:hành vi mơ hồ của ký tự dòng mới

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 

dữ liệu trên được lưu trữ trong chuỗi JsonArrObj. Để tải lên dữ liệu/chuỗi, tôi đang sử dụng mã sau:

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

Chuỗi được tải lên thành công. Vấn đề tôi đang phải đối mặt là: trong khi chuỗi đang được chuyển đổi thành jsonParams, dữ liệu chuỗi "\n" được chuyển đổi thành "\\n" kết quả là ở phía máy chủ, chuỗi này hiển thị một hộp nhỏ thay cho dòng mới.

Khi tôi mở chuỗi này trong ứng dụng NOTEPAD, nó sẽ hiển thị các hộp nhỏ. Nhưng khi tôi mở nó trong ứng dụng WORDPAD, văn bản được hiển thị trên một dòng mới. Theo tôi, tôi có thể đã nhập đúng "loại nội dung" hoặc mã hóa. Xin đề nghị một giải pháp cho cùng.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); đã lỗi khi tải lên bản thân ...

Các dữ liệu được gửi trong jsonParams- jsonArrObj cuối cùng trông giống như:

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

bạn đã thử thêm "\" vào trước "\ n" chưa? đó là "\\ n" thay vì "\ n"? –

+0

@ V.P.Verma, nếu tôi đặt "\\ n", tôi sẽ không thể hiển thị văn bản trong chế độ xem web. Ngoài ra, vấn đề là để bảo toàn "\ n". Bộ mã hóa đang chuyển đổi "\ n" thành không muốn "\\ n" .. – Pallavi

+0

@ user370305 yes .. – Pallavi

Trả lời

0

Hey tại sao bạn không sử dụng các giá trị Unicode cho \ n như và bất kỳ nhân vật nào khác đang tạo sự cố này như thế này U + 002FU + 006E

+0

ok ... tôi sẽ dùng thử. – Pallavi

1

Vâng, bộ mã hóa thoát khỏi ký tự dòng mới của bạn. Nếu bạn muốn chuyển các ký tự dòng mới đúng cách, bạn có thể mã hóa toàn bộ luồng bằng base64. Nếu os mục tiêu của bạn (để gửi dữ liệu) là Windows thì bạn nên sử dụng \ r \ n, nếu mac sau đó \ r nếu unix \ linux thì \ n. Sau khi mã hóa dữ liệu cố gắng gửi mã hóa và giải mã nó ở phía bên kia. Đối với base64 Ông Google sẽ thuyết phục bạn.