2011-05-14 59 views
1

您好,我正嘗試在我的android應用程序中使用希伯來字符讀取UTF-8編碼的txt文件,現在,焦炭總是在字符串我讀的開始追加..我不知道爲什麼當從Android的txt文件中讀取unicode文本時附加'a'char字符串

這裏是我的代碼:

 void Read(){ 
     try { 
      File fileDir = new File("/sdcard/test.txt"); 

      BufferedReader in = new BufferedReader(new InputStreamReader(
          new FileInputStream(fileDir), "UTF8")); 

      String str; 

      while ((str = in.readLine()) != null) { 
        Log.i("TEST",str); 
      } 

        in.close(); 
      } 
      catch (UnsupportedEncodingException e) 
      { 
       System.out.println(e.getMessage()); 
      } 
      catch (IOException e) 
      { 
       System.out.println(e.getMessage()); 
      } 
      catch (Exception e) 
      { 
       System.out.println(e.getMessage()); 
      } 
     } 

這是結果我得到

05-15 01:53 :25.269:信息/測試(16236):請參閱 a

+0

如果將文件帶到計算機上,數據本身中是否存在「a」? – Thanatos 2011-05-15 05:03:27

+0

沒有..「a」沒有出現在txt文件中,順便說一下,我檢查了'a'字符的Character.UnicodeBlock和它的阿拉伯語演示文稿格式B – idanakav 2011-05-17 08:06:35

+0

無論您閱讀的字符串是否總是一個字符? – 2011-05-19 08:34:15

回答

2

爲了得到更好的答案,我需要兩個問題的答案:

  • 什麼是有問題的字符的確切代碼點(你的「A」)?
  • 問題區域周圍文件中的確切字節順序是什麼?

我要在這裏猜測:你說這個字符是文件中的第一個字符(「在字符串的開始處附加」),並且你回到了阿拉伯語表示形式B中塊。阿拉伯語演示文稿表格B的最後一個字符,與阿拉伯語毫不相干,是U + FFEF或字節順序標記(BOM)。它通常出現在UTF-16或UTF-32編碼文件的開頭,並標識編碼的「字節序」(無論該文件是UTF-16LE還是UTF-16BE編碼,同樣適用於UTF-32)。但是,UTF-8數據通常不會出現,因爲UTF-8沒有「字節順序」的概念。也就是說,一些大腦死亡的Windows程序將堅持它,然後有一個額外的選項「沒有BOM的UTF-8」。 (然後使用材料清單來識別可能以UTF-8編碼的文件。)我的猜測是您的數據中有一個BOM,並且您的程序正在讀取它並將其傳遞給您。

IF這是你的問題,你的文件是在UTF-8真正的編碼,你應該能夠找到附近的文件的開頭以下字節序列:EF BB BF - 這是的UTF-8表示U + FFEF。

+0

感謝Thanatos,我不知道BOM的存在,實際上EF BB BF是文件開頭的字節序列。我所做的是添加一個if語句來檢查字符串是否以UTF-8 BOM開頭,如果是這樣,我將它刪除,並且它可以工作。 – idanakav 2011-05-22 07:54:41

相關問題