2011-05-26 19 views
2

私はドイツのAppを開発しています。これはJSONからListViewにデータを取得します。 üöäßのような特殊文字があるので、私のコードでは、これらの文字はと表示されますか?JSON(ööüß)の特殊文字をエンコード

誰かが私の問題を解決するのに役立つことができますか? THX

public class LooserSync extends IntentService { 

    public LooserSync() { 
     super("LooserSyncService"); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     Database.OpenHelper dbhelper = new Database.OpenHelper(getBaseContext()); 
     SQLiteDatabase db = dbhelper.getWritableDatabase(); 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     db.beginTransaction(); 
     HttpGet request = new HttpGet(
       "http://liebenwald.spendino.net/admanager/dev/android/projects.json"); 
     try { 
      HttpResponse response = httpClient.execute(request); 
      if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
       InputStream instream = response.getEntity().getContent(); 
       BufferedReader r = new BufferedReader(new InputStreamReader(
         instream), 8000); 
       StringBuilder total = new StringBuilder(); 
       String line; 
       while ((line = r.readLine()) != null) { 
        total.append(line); 
       } 
       instream.close(); 
       String bufstring = total.toString(); 
       JSONArray arr = new JSONArray(bufstring); 
       Database.Tables tab = Database.Tables.AllTables.get(Database.Project.NAME); 
       tab.DeleteAll(db); 
       for (int i = 0; i < arr.length(); i++) { 
        tab.InsertJSON(db, (JSONObject) arr.get(i)); 
       } 
       db.setTransactionSuccessful(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     db.endTransaction(); 
     db.close(); 

    } 

} 

答えて

7

JSONコンテンツでは、デフォルトの文字セットとしてUTF-8が使用されます(the RFC 4627, chapter 3参照)。

BufferedReader r = new BufferedReader(new InputStreamReader(instream, "UTF-8"), 8000); 
+0

私のために働いてくれてありがとう.Laurent Etiemble。 – nikki

0

これは、応答があなたのURLが返すヘッダです:

Accept-Ranges:none 
Connection:Keep-Alive 
Content-Length:14572 
Content-Type:text/plain 
Date:Thu, 26 May 2011 11:47:52 GMT 
ETag:"404f6-38ec-4a42a184b1c80;4a0b4ae611cc0" 
Keep-Alive:timeout=15, max=100 
Last-Modified:Thu, 26 May 2011 09:03:30 GMT 
Server:Apache 

Content-Typeヘッダが文字セットの文が不足しています。あなたがそれを変更することができれば、それはうまくいくはずです。

編集:それを変更できない場合は、InputStreamReaderの2番目の引数として、文字セットをハードコードする必要があります。

+0

また、JSON-コンテンツはUTF-8でなければなりません:あなたは、サーバーが正しいエンコーディングで応答を返すことを確認するために、明示的にストリームリーダーのためのUTF-8エンコーディングを使用する必要があります。以下も参照してください。http://stackoverflow.com/questions/5536140/android-parsing-special-characters-a-o-u-in-json – Olegas

+0

オレガが正しいです。現在はISO-8859-1です。 – RoToRa

0

可能な倍数:Android Java UTF-8 HttpClient Problem

通常、あなたが期待しているものがan ASCII characterではない場合は、エンコードについて考える必要があります。サーバがあなたに伝えているのはエンコーディングとそれを正しくデコードする方法です。

1

データはUTF-8 standrd

HttpGet request = new HttpGet(
       "http://liebenwald.spendino.net/admanager/dev/android/projects.json"); 

httpget.setHeader("charset", "utf-8"); 
     ResponseHandler<String> responseHandler = new ResponseHandler<String>() { 
    public String handleResponse(final HttpResponse response) 
     throws HttpResponseException, IOException { 
     StatusLine statusLine = response.getStatusLine(); 
     if (statusLine.getStatusCode() >= 300) { 
      throw new HttpResponseException(statusLine.getStatusCode(), 
        statusLine.getReasonPhrase()); 
     } 

     HttpEntity entity = response.getEntity(); 
     return entity == null ? null : EntityUtils.toString(entity, "UTF-8"); 
    } 
} 

     String html = httpclient.execute(request, responseHandler); 

であると感謝 ディーパック

+0

私はコードを追加しようとしましたが、いくつかのエラーが発生しました – hectichavana

2

が明示的に例えば、InputStreamReaderのためのエンコーディングを定義してくださいドイツのデータを取得するために、次のコードを使用します

String encoding = "ISO-8859-1"; 
BufferedReader reader = new BufferedReader(new InputStreamReader(is, encoding)); 
関連する問題