android - 换行符的歧义行为

标签 android newline

我正在向网络服务上传一个大字符串。该字符串包含写为“\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 应用程序中打开它时,文本显示在一个新行上。根据我的说法,我可能输入了错误的“内容类型”或编码。请提出相同的解决方案。

JsonArrObj= URLEncoder.encode(JsonArrObj, "utf-8"); 上传时出错...

jsonParams-jsonArrObj 中发送的数据最终看起来是这样的:

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

最佳答案

好吧,编码器转义了你的换行符。如果要正确传输换行符,可以使用 base64 对整个流进行编码。如果您的目标操作系统(用于发送数据)是 Windows 那么您应该使用\r\n,如果 mac 那么\r 如果 unix\linux 那么\n。编码数据后尝试发送编码并在另一端解码。对于 base64,谷歌先生会说服你。

关于android - 换行符的歧义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10895850/

相关文章:

Android Studio 2.0 - 错误 :Execution failed for task app:compileDebugAidl

java - android - 将 ToggleButton 转换为子类

php - 向MySQL插入字符串后,字符 '\n'(换行符)消失

ruby - Ruby 中的系统换行符

java - Java 正则表达式中的新行和美元符号

c - 从 fgets() 输入中删除尾随换行符

android - ActionBarSherlock:在极少数设备上出现 java.lang.IllegalStateException

android - BroadcastReceiver.onReceive 中的上下文是否始终是调用 registerReceiver 的 Activity ?

java - 未找到类 "com.google.android.gms.common.app.GmsApplication"

python - Django:显示管理站点的换行符?