2012-05-28 2 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, однако в этом случае он не заменяет его правильным символом ... Каким будет способ сделать это?

EDIT: Забыл сказать, что, поскольку я использую JavaME Свойства класса или ничего подобного не существует, поэтому может показаться, что я изобретать колесо ...

ответ

1

Вы должны убедиться, что вы кодируете символы в вашем InputStreamReader, как в файле. Если они не совпадают, некоторые символы могут быть неверными.

2

Если он кодирован UTF-16, вы можете не только InputStreamReader isr = new InputStreamReader(is, "UTF16")?

Это позволит распознать ваши специальные персонажи с самого начала, и вам не нужно будет выполнять какие-либо замены.

+0

Пробовал следующее: isr = new InputStreamReader (есть, «UTF8»); однако это не сработало ... нужно упомянуть, что я работаю с JavaME – Pablo

+0

. Что кодируется? UTF8 или UTF16? Потому что UTF8 похож на ASCII, и чтение его неверно будет терять символы. –

+0

Просто изменил документ на UTF8, однако не результаты ... – Pablo

Смежные вопросы