我从网页上获取的JSON数组出现奇怪的字符编码问题。服务器正在发回此标头:
内容类型文字/ javascript;字符集= UTF-8
另外,我可以查看Firefox或任何浏览器中的JSON输出,并且Unicode字符正确显示。响应有时会包含来自其他语言的带有重音符号等的单词。但是,当我将其下拉并放在Java中的字符串中时,我得到了那些奇怪的问号。这是我的代码:
HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, "utf-8"); params.setBooleanParameter("http.protocol.expect-continue", false); HttpClient httpclient = new DefaultHttpClient(params); HttpGet httpget = new HttpGet("http://www.example.com/json_array.php"); HttpResponse response; try { response = httpclient.execute(httpget); if(response.getStatusLine().getStatusCode() == 200){ // Connection was established. Get the content. HttpEntity entity = response.getEntity(); // If the response does not enclose an entity, there is no need // to worry about connection release if (entity != null) { // A Simple JSON Response Read InputStream instream = entity.getContent(); String jsonText = convertStreamToString(instream); Toast.makeText(getApplicationContext(), "Response: "+jsonText, Toast.LENGTH_LONG).show(); } } } catch (MalformedURLException e) { Toast.makeText(getApplicationContext(), "ERROR: Malformed URL - "+e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText(getApplicationContext(), "ERROR: IO Exception - "+e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (JSONException e) { Toast.makeText(getApplicationContext(), "ERROR: JSON - "+e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); } private static String convertStreamToString(InputStream is) { /* * To convert the InputStream to String we use the BufferedReader.readLine() * method. We iterate until the BufferedReader return null which means * there's no more data to read. Each line will appended to a StringBuilder * and returned as String. */ BufferedReader reader; try { reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } StringBuilder sb = new StringBuilder(); String line; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }
如您所见,我在InputStreamReader上指定了UTF-8,但是每次通过Toast查看返回的JSON文本时,它都会带有奇怪的问号。我在想我需要将InputStream发送到byte []吗?
在此先感谢您的帮助。
试试这个:
if (entity != null) { // A Simple JSON Response Read // InputStream instream = entity.getContent(); // String jsonText = convertStreamToString(instream); String jsonText = EntityUtils.toString(entity, HTTP.UTF_8); // ... toast code here }