2014-03-24 558 views
1

我從Aozora Bunko獲取html源代碼。 Html文件是Shift-JIS編碼。我正試圖獲得書名和作者。然後我想將標題和作者錄製到SQLite(UTF-8)數據庫中。如何將Shift-JIS編碼的字符串轉換爲UTF-8?

String[] splittedResult = result.split("\"title\">"); 
      splittedResult = splittedResult[1].split("</h1>"); 
      String title = splittedResult[0]; 
      byte[] b = null; 
      try { 
       b = title.getBytes("Shift_JIS"); 
      } catch (UnsupportedEncodingException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      String value=null; 
      try { 
       value = new String(b, "UTF-8"); 
      } catch (UnsupportedEncodingException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

... 
myDatabase.addBookInformation(value, author); 

結果是這樣的:拉丁字母正常顯示。但是,日本的信件被框所示的問題裏面標記(請不要注意空值)

enter image description here

如何解決這個問題呢?

+2

Java字節數組可以包含具有特定編碼的字符串。 Java字符串不能:它基本上是一個不包含任何編碼的字符數組。您的代碼以字符串變量(名爲'result')開頭。因此,將具有特定編碼的HTML頁面轉換爲無編碼的字符數組已經發生。使用調試器來檢查'result'或'title'是否包含正確的日文字符。如果沒有,問題出現在問題中顯示的代碼之前。如果沒關係,那麼我不明白你的問題。 – Codo

回答

1

正如@Codo指出的那樣,此問題的解決方案之前是。 我改變了這個

s = EntityUtils.toString(response.getEntity(), "UTF-8"); 

這個

s = EntityUtils.toString(response.getEntity(), "Shift_JIS"); 

而且現在也沒有必要進行編碼。

String[] splittedResult = result.split("\"title\">"); 
     splittedResult = splittedResult[1].split("</h1>"); 
     String title = splittedResult[0]; 
     /** I HAVE TAKEN THIS PART OF MY CODE 
     byte[] b = null; 
     try { 
      b = title.getBytes("Shift_JIS"); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     String value=null; 
     try { 
      value = new String(b, "UTF-8"); 
     } catch (UnsupportedEncodingException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 
     **/ 
相關問題