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

the above data is stored in string JsonArrObj. To upload the data/string, i am using the following code:

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

The string is uploaded successfully. The problem I am facing is: while string is being converted to jsonParams, the "\n" in the string data gets converted to "\\n" as a result, on the server side, it shows a small box in stead of new line.

When I open this string in NOTEPAD application, it displays small boxes. But when I open it in WORDPAD app, text is displayed on a new line. According to me, I might have entered in-correct "content-type" or encoding. Please suggest a solution for the same.

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); gave error while uploading itself...

The data which is sent in the jsonParams- jsonArrObj finally looks like:

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
4

2 に答える 2

1

さて、エンコーダは改行文字をエスケープします。改行文字を適切に転送したい場合は、ストリーム全体を base64 でエンコードできます。ターゲット OS (送信するデータ用) が Windows の場合は \r\n を使用し、Mac の場合は \r unix\linux の場合は \n を使用する必要があります。データをエンコードした後、エンコードされたものを送信し、反対側でデコードしてみてください。base64 については、Google 氏が納得してくれるでしょう。

于 2013-04-17T07:41:10.843 に答える
0

\n as や、この U+002FU+006E のようにこの問題を引き起こしている他の文字に Unicode 値を使用しないのはなぜですか?

于 2012-06-11T15:59:28.277 に答える