2011-06-04 44 views
1

我有一個文本文件,其中包含需要預加載到SQLite數據庫中的數據。我保存在res/raw中。爲什麼不使用inputStream讀取外部字符?

我使用readTxtFromRaw()來讀取整個文件,然後我使用StringTokenizer類來逐行處理文件。

但是readTxtFromRaw返回的String不顯示文件中的外部字符。我需要這些,因爲有些文本是西班牙語或法語。我錯過了什麼嗎?

代碼:

String fileCont = new String(readTxtFromRaw(R.raw.wordstext)); 
StringTokenizer myToken = new StringTokenizer(fileCont , "\t\n\r\f"); 

的readTxtFromRaw方法是:

private String readTxtFromRaw(Integer rawResource) throws IOException 
{ 
    InputStream inputStream = mCtx.getResources().openRawResource(rawResource); 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 

    int i = inputStream.read(); 
    while (i != -1) 
    { 
     byteArrayOutputStream.write(i); 
     i = inputStream.read(); 
    } 
    inputStream.close(); 

    return byteArrayOutputStream.toString(); 
} 

該文件使用Eclipse創建的,並且所有的字符出現在Eclipse的罰款。

這可能與Eclipse本身有關嗎?我在Watch窗口中設置了一個斷點並檢出了myToken。我試圖手動替換正確的字符(例如í或é),它不會讓我。

回答

1

你檢查了幾種編碼?

  • 什麼是您的源文件的編碼?
  • 什麼是你的輸出流的編碼?

byteArrayOutputStream.toString()根據平臺的默認字符編碼進行轉換。所以我想它會去掉外來字符或者將它們轉換成不會顯示在輸出中的方式。

你已經試過使用byteArrayOutputStream.toString(String enc)?爲編碼嘗試使用「UTF-8」或「iso-8859-1」或「UTF-16」。

+1

其實我右鍵單擊Eclipse Package Explorer中的文件,選擇屬性,並且有一個文本文件編碼選項。選定的UTF-8和一切工作正常。謝謝你。 – Sandy 2011-06-04 20:25:45

+0

是否使用ByteArrayOutputStream相同,因爲它是這樣使用的:BufferedReader reader = new BufferedReader(new InputStreamReader(mCtx.getResources()。openRawResource(rawResource))); ??兩者似乎現在都有效,但我不知道一個人是否比另一個人更好。 – Sandy 2011-06-04 20:28:27

+1

我猜兩種方式都可以,但BufferedReader看起來更好:-)我想它會以更清晰的方式處理編碼。 – rdmueller 2011-06-04 20:34:40

相關問題