2012-06-05 4 views
11

Webサービスに大きな文字列をアップロードしています。文字列には改行文字が含まれ、 "\ 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アプリケーションで開くと、テキストが新しい行に表示されます。私によれば、正しい「コンテンツタイプ」またはエンコーディングを入力した可能性があります。同じ解決策を提案してください。

... jsonParams- jsonArrObjに送信されたデータを自身のアップロード中に

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8");はエラーを与えた最終的には次のようになります。

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

「\ n」の前に余分な「\」を入れてみましたか?それは "\ n"の代わりに "\ n"ですか? –

+0

@ V.P.Verma、 "\\ n"を置くと、Webビューでテキストを表示できなくなります。また、問題は "\ n"をそのまま保存することです。エンコーダは "\ n"を "望ましくない" \ nに変換しています.. – Pallavi

+0

@ user370305はい.. – Pallavi

答えて

0

はねえ、なぜあなたは、\ nとしてのためのUnicode値を使用していませんこの問題を作成している他の文字 like U + 002FU + 006E

+0

ok ...私はそれを試してみましょう。 – Pallavi

1

まあ、エンコーダは改行文字をエスケープします。改行文字を正しく転送したい場合は、base64でストリーム全体をエンコードすることができます。あなたのターゲットOSがWindowsの場合は、\ r \ n、macの場合は\ r、unixの場合は\ linuxの場合は\ nを使います。データをエンコードした後、エンコードして相手側にデコードしてみます。 base64については、Googleがあなたに説得します。

関連する問題