我正在将一个大字符串上传到网络服务。该字符串包含新行字符,写为“\ 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
答案 0 :(得分:1)
好吧,编码器会转义你的换行符。如果要正确传输换行符,可以使用base64对整个流进行编码。如果您的目标操作系统(用于发送数据)是Windows,那么您应该使用\ r \ n,如果是mac,那么\ r \ n如果unix \ linux则是\ n。编码数据后,尝试发送编码并在另一侧解码。对于base64,Google先生会说服你。
答案 1 :(得分:0)
嘿,为什么不使用\ n的Unicode值以及创建此问题的任何其他字符 像这样的U + 002FU + 006E