2012-05-28 101 views
1

我有一個問題,我試圖從文件中讀取一組鍵和值對(如字典)。爲此,我使用以下代碼:閱讀java中的特殊字符

InputStream is = this.getClass().getResourceAsStream(PROPERTIES_BUNDLE); 
    properties=new Hashtable(); 

    InputStreamReader isr=new InputStreamReader(is); 
    LineReader lineReader=new LineReader(isr); 
    try { 
     while (lineReader.hasLine()) { 
      String line=lineReader.readLine(); 
      if(line.length()>1 && line.substring(0,1).equals("#")) continue; 
      if(line.indexOf("=")!=-1){ 
       String key=line.substring(0,line.indexOf("=")); 
       String value=line.substring(line.indexOf("=")+1,line.length()); 
       properties.put(key, value); 
      }    
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

和readLine函數。

public String readLine() throws IOException{ 
    int tmp; 
    StringBuffer out=new StringBuffer(); 
    //Read in data 
    while(true){ 
     //Check the bucket first. If empty read from the input stream 
     if(bucket!=-1){ 
      tmp=bucket; 
      bucket=-1; 
     }else{ 
      tmp=in.read(); 
      if(tmp==-1)break; 
     } 
     //If new line, then discard it. If we get a \r, we need to look ahead so can use bucket 
     if(tmp=='\r'){ 
      int nextChar=in.read(); 
      if(tmp!='\n')bucket=nextChar;//Ignores \r\n, but not \r\r 
      break; 
     }else if(tmp=='\n'){ 
      break; 
     }else{ 
      //Otherwise just append the character 
      out.append((char) tmp); 
     } 
    } 
    return out.toString(); 
} 

一切都很好,但我希望它能夠解析特殊字符。例如: - 這將被編入\ u00F3,但在這種情況下,它不會用正確的字符替換它......將有什麼辦法做到這一點?

編輯:忘了說,因爲我使用的JavaME Properties類或任何類似不存在,這就是爲什麼它可能看起來我重新發明輪子...

回答

1

您需要確保您的字符編碼在您的InputStreamReader中設置爲文件的編碼。如果不匹配,某些字符可能不正確。

2

如果它使用UTF-16編碼,你能不能只是 InputStreamReader isr = new InputStreamReader(is, "UTF16")

這會從一開始就認出你的特殊字符,你不需要做任何替換。

+0

嘗試以下操作:isr = new InputStreamReader(is,「UTF8」);然而它沒有奏效...不得不提及我正在使用JavaME – Pablo

+0

它編碼了什麼? UTF8或UTF16?由於UTF8與ASCII類似,並且不正確地讀取它會丟失字符。 –

+0

只是將文檔更改爲UTF8,但不是結果... – Pablo