title: encoding Hebrew in java and JSON
body: <p>So  i have an android app that shows some messages. i can add messages from the app to my web service's database but i have difficulties in encoding hebrew to the right format.</p>
  
  <p>this is my JSONParser.class:</p>
  
  <pre><code>package com.example.neotavraham;
  
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.UnsupportedEncodingException;
  import java.util.List;
  
  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.NameValuePair;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.entity.UrlEncodedFormEntity;
  import org.apache.http.client.methods.HttpGet;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.client.utils.URLEncodedUtils;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.json.JSONException;
  import org.json.JSONObject;
  
  import android.util.Log;
  
  public class JSONParser {
  
  static InputStream is = null;
  static JSONObject jObj = null;
  static String json = "";
  
  // constructor
  public JSONParser() {
  
  }
  
  
  
  public JSONObject getJSONFromUrl(final String url) {
  
      // Making HTTP request
      try {
          // Construct the client and the HTTP request.
          DefaultHttpClient httpClient = new DefaultHttpClient();
          HttpPost httpPost = new HttpPost(url);
  
          // Execute the POST request and store the response locally.
          HttpResponse httpResponse = httpClient.execute(httpPost);
          // Extract data from the response.
          HttpEntity httpEntity = httpResponse.getEntity();
          // Open an inputStream with the data content.
          is = httpEntity.getContent();
  
      } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
      } catch (ClientProtocolException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
  
      try {
          // Create a BufferedReader to parse through the inputStream.
          BufferedReader reader = new BufferedReader(new InputStreamReader(
                  is, "iso-8859-1"), 8);
          // Declare a string builder to help with the parsing.
          StringBuilder sb = new StringBuilder();
          // Declare a string to store the JSON object data in string form.
          String line = null;
  
          // Build the string until null.
          while ((line = reader.readLine()) != null) {
              sb.append(line + "\n");
          }
  
          // Close the input stream.
          is.close();
          // Convert the string builder data to an actual string.
          json = sb.toString();
      } catch (Exception e) {
          Log.e("Buffer Error", "Error converting result " + e.toString());
      }
  
      // Try to parse the string to a JSON object
      try {
          jObj = new JSONObject(json);
      } catch (JSONException e) {
          Log.e("JSON Parser", "Error parsing data " + e.toString());
      }
  
      // Return the JSON Object.
      return jObj;
  
  }
  
  
  // function get json from url
  // by making HTTP POST or GET mehtod
  public JSONObject makeHttpRequest(String url, String method,
          List&lt;NameValuePair&gt; params) {
  
      // Making HTTP request
      try {
  
          // check for request method
          if(method == "POST"){
              // request method is POST
              // defaultHttpClient
              DefaultHttpClient httpClient = new DefaultHttpClient();
              HttpPost httpPost = new HttpPost(url);
              httpPost.setEntity(new UrlEncodedFormEntity(params));
  
              HttpResponse httpResponse = httpClient.execute(httpPost);
              HttpEntity httpEntity = httpResponse.getEntity();
              is = httpEntity.getContent();
  
          }else if(method == "GET"){
              // request method is GET
              DefaultHttpClient httpClient = new DefaultHttpClient();
              String paramString = URLEncodedUtils.format(params, "utf-8");
              url += "?" + paramString;
              HttpGet httpGet = new HttpGet(url);
  
              HttpResponse httpResponse = httpClient.execute(httpGet);
              HttpEntity httpEntity = httpResponse.getEntity();
              is = httpEntity.getContent();
          }           
  
      } catch (UnsupportedEncodingException e) {
          e.printStackTrace();
      } catch (ClientProtocolException e) {
          e.printStackTrace();
      } catch (IOException e) {
          e.printStackTrace();
      }
  
      try {
          BufferedReader reader = new BufferedReader(new InputStreamReader(
                  is, "iso-8859-1"), 8);
          StringBuilder sb = new StringBuilder();
          String line = null;
          while ((line = reader.readLine()) != null) {
              sb.append(line + "\n");
          }
          is.close();
          json = sb.toString();
      } catch (Exception e) {
          Log.e("Buffer Error", "Error converting result " + e.toString());
      }
  
      // try parse the string to a JSON object
      try {
          jObj = new JSONObject(json);
      } catch (JSONException e) {
          Log.e("JSON Parser", "Error parsing data " + e.toString());
      }
  
      // return JSON String
      return jObj;
  
  }
  }
  </code></pre>
  
  <p>and this is the lines that gets the information from the user and tries to encode them:</p>
  
  <pre><code>        String post_title = title.getText().toString();
          String post_message = message.getText().toString();
  
          byte ptext[] = post_title.getBytes(Windows_1255); 
          String value = new String(ptext, UTF_8);
          post_title = value;
  
          byte ptext2[] = post_message.getBytes(Windows_1255); 
          value = new String(ptext2, UTF_8);
          post_message = value;
  </code></pre>
  
  <p>when : <code>public static final Charset Windows_1255 = Charset.forName("Windows-1255");
          public static final Charset UTF_8 = Charset.forName("UTF-8");</code></p>
  
  <p>so if for example the title will be "שלום" (hello in hebrew), it will show this as "????" (only question marks).</p>
  
  <p>Everything works perfect in the app so it cannot be something that is not related to the encoding part!</p>
  
  <p>what can i do?</p>