2016-01-20 91 views
1

我面臨的問題是,當我用一個口音分析一個字符時,我的程序會爲該字符吐出隨機的亂碼。有沒有什麼辦法可以解析出這些字符,這樣它就可以解析出來並重寫字符呢?Json分析重音字符

解析Céline Dion =>Céline Dion

String fullURLPath = "https://itunes.apple.com/search?term=" + songInfoQuery.replace(" ", "+"); 

     System.out.println("!" + fullURLPath.toString()); 

     URL url = new URL(fullURLPath); 
     HttpURLConnection request = (HttpURLConnection) url.openConnection(); 
     request.connect(); 

     JsonParser jp = new JsonParser(); 
     JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); 
     JsonObject rootobj = root.getAsJsonObject(); 
     JsonArray arr = rootobj.getAsJsonArray("results"); 
     try { 
      rootobj = arr.get(0).getAsJsonObject(); 
     } catch (IndexOutOfBoundsException e) { 
      System.out.println("not in itunes"); 
     } 
+0

請勿使用異常處理來檢查「not in itunes」情況。除了事實上它並不是一個特例,你不知道是否由於'arr.get(0)'或'getAsJsonObject()'中發生的事件而發生了IOOBE。檢查數組的長度。 –

+0

對,我只是使用它作爲測試的錯誤檢查方法,我一定會改變, – QQPrinti

回答

1

的問題是,你正在分析使用JVM的默認字符集,這是用來編碼響應的字符集不同被送回給您的數據。

查看在瀏覽器中獲取該URL的響應頭,響應以UTF-8形式發送。

當你創建你應該明確地指定字符集,你InputStreamReader

new InputStreamReader((InputStream) request.getContent(), StandardCharsets.UTF_8) 

你可以另外指定UTF-8作爲默認字符集開始你的JVM時,但它很容易忘記這樣做 - 它最好在你的代碼中明確。

+0

我有一個預感,這是由於字符集,但這並沒有改變任何東西,不幸 – QQPrinti

+0

@QQPrinti它絕對是用charsets做。如果你將ISO-8859-1的UTF-8字節解釋爲「é」,你將得到''''''''。 –

+0

你是對的,我很尷尬地說我在做什麼,但你已經釘了它!謝謝 – QQPrinti