2014-02-27 2 views
0

Эй, я использую обратный Google Geocoder, и когда имя города, например, «Königsaich», геокодер называет его «Königsaich». Как фильтровать символ «Ã¶» и заменить его на правый символ «ö»?Как заменить специальные символы, такие как «Ã¶» из строки, и дать им правильные символы «...»?

EDIT:

Мой код:

public JSONObject getJSONCity(double lat, double lon){ 

     HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?latlng="+lat+","+lon+"&sensor=false"); 
      HttpClient client = new DefaultHttpClient(); 
      HttpResponse response; 
      StringBuilder stringBuilder = new StringBuilder(); 

      try { 
       response = client.execute(httpGet); 
       HttpEntity entity = response.getEntity(); 
       InputStream stream = entity.getContent(); 
       int b; 
       while ((b = stream.read()) != -1) { 
        stringBuilder.append((char) b); 
       } 
      } catch (ClientProtocolException e) { 
       } catch (IOException e) { 
      } 

      JSONObject jsonObject = new JSONObject(); 
      try { 
       jsonObject = new JSONObject(stringBuilder.toString()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return jsonObject; 
    } 


    public String getCityname(double lat, double lon){ 

     JSONObject ret = getJSONCity(lat,lon); 
     JSONArray jsonArray; 

     JSONObject location; 
     String location_string; 

     try { 
      jsonArray = ret.getJSONArray("results").getJSONObject(0).getJSONArray("address_components"); 
      cityname = jsonArray.getJSONObject(2).getString("long_name"); 

      //Get JSON Array called "results" and then get the 0th complete object as JSON   
      location = ret.getJSONArray("results").getJSONObject(0); 
      // Get the value of the attribute whose name is "formatted_string" 
      location_string = location.getString("formatted_address"); 

      System.out.println(" results: " + location_string); 

      System.out.println(" My City: " + cityname); 
     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 
     return cityname; 
    } 

Может кто-нибудь дать мне пример?

+4

Если вы получили неправильные данные в строке, вам нужно сделать шаг назад и зафиксировать его в начале процесса - как правило, где вы получили «байты на текст ". Пожалуйста, покажите нам, как вы используете API-интерфейс геокодирования. –

+0

Я думаю, что у меня ошибка, а русское имя подходит? Я правильно? –

+0

Я думаю, что yoiu может применять понятие регулярного выражения там .. –

ответ

0
String actualstring ="what ever your string which you want to replace here get "; 
     if(actualstring.contains("here your string which u want to chk")); 
       { 
        // it chk weather it contain that string which u want to replace 
      actualstring.replace("target", "replacement"); 
       } 
+0

Проблема заключается в том, что существует много тысяч символов, которые будут считаться некорректно, если вы будете читать байты из 'HttpEntity' и рассматривать их как символы. Предлагаете ли вы включить этот кусок кода тысячи и тысячи раз? Это совершенно неверный путь решения этой проблемы. –

0

Попробуйте

str = str.replace(' ','_'); 

общественности Строка замены (цель CharSequence, замена CharSequence) Добавленные уровня API 1 копий этой строки, заменяя вхождения указанной последовательности-мишени с другой последовательностью. Строка обрабатывается от начала до конца.

Параметры Целевая последовательность для замены. заменить заменяющую последовательность.

Возврат: Итоговая строка. Throws NullPointerException, если цель или замена недействительны.

0

Ваша проблема в том, что вы читаете байты из своего HttpEntity и считаете, что каждый байт будет единственным символом. В зависимости от вашей кодировки, которая может работать для символов ASCII, но, скорее всего, не удастся для многих других символов.

Чтобы сделать это правильно, вместо создания сложных комбинаций поиска и замены вы хотите использовать библиотеку, такую ​​как Apache HTTP Utils library. Он содержит класс EntityUtils, который имеет некоторые методы для чтения строки из HttpEntity.

Javadoc для него находится в http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/util/EntityUtils.html