title: Android Java UTF-8 HttpClient Problem
body: <p>I am having weird character encoding issues with a JSON array that is grabbed from a web page. The server is sending back this header: </p>
  
  <p>Content-Type    text/javascript; charset=UTF-8</p>
  
  <p>Also I can look at the JSON output in Firefox or any browser and Unicode characters display properly. The response will sometimes contain words from another language with accent symbols and such. However I am getting those weird question marks when I pull it down and put it to a string in Java. Here is my code:</p>
  
  <pre><code>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();
  }
  </code></pre>
  
  <p>As you can see, I am specifying UTF-8 on the InputStreamReader but every time I view the returned JSON text via Toast it has strange question marks. I am thinking that I need to send the InputStream to a byte[] instead?</p>
  
  <p>Thanks in advance for any help.</p>