我有一個使用MultipartEntity內容類型將圖像和文本作爲HttpPost發送的方法。一切都很適合英文符號,但對於unicode符號(例如Cyrliics),它只發送???。所以,我想知道,如何正確地爲MultipartEntity設置UTF-8編碼,因爲我已經嘗試了幾個在SO上建議的解決方案,但沒有一個能夠工作。 這裏我已經:通過MultipartEntity發送Unicode字符
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
MultipartEntityBuilder mpEntity = MultipartEntityBuilder.create();
mpEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
mpEntity.setCharset(Consts.UTF_8);
mpEntity.addPart("image", new FileBody(new File(attachmentUri), ContentType.APPLICATION_OCTET_STREAM));
ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8);
StringBody stringBody = new StringBody(mMessage, contentType);
mpEntity.addPart("message", stringBody);
final HttpEntity fileBody = mpEntity.build();
httpPost.setEntity(fileBody);
HttpResponse httpResponse = httpclient.execute(httpPost);
UPD 我試圖用的InputStream按@Donaudampfschifffreizeitfahrt建議。現在我得到了 個字符。
InputStream stream = new ByteArrayInputStream(mMessage.getBytes(Charset.forName("UTF-8")));
mpEntity.addBinaryBody("message", stream);
也試過:
mpEntity.addBinaryBody("message", mMessage.getBytes(Charset.forName("UTF-8")));
您正在使用'默認字符集'進行IO操作,無論您是使用什麼操作。這是來自Sun的一個糟糕的設計,你必須**總是**使用OutputStreamReader/InputStreamWriter與指定的編碼,如果你處理寫/讀字符串。 – 2014-09-04 12:15:22
@Donaudampfschifffreizeitfahrt您好!你能更具體一點,我怎麼能在我的問題的上下文中使用InputStreamWriter?示例將不勝感激。謝謝。 – mol 2014-09-04 12:34:55
呵呵,應該是OutputStreamWriter和InputStreamReader。 httpclient必須具有Body類型接受Writer,但我現在沒有該庫。只需搜索這些類名稱即可。 – 2014-09-04 12:39:18