1

質問があります。キーと値のペアのセット(辞書のように)をファイルから読み込もうとしています。このために、次のコードを使用しています。

 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 クラスなどは存在しないと言うのを忘れていました。そのため、車輪を再発明しているように見えるかもしれません...

4

2 に答える 2

2

UTF-16 でエンコードされている場合は InputStreamReader isr = new InputStreamReader(is, "UTF16")

これにより、最初から特殊文字が認識され、置換を行う必要がなくなります。

于 2012-05-28T17:09:16.873 に答える
1

InputStreamReader で文字エンコーディングがファイルのエンコーディングに設定されていることを確認する必要があります。一致しない場合、一部の文字が正しくない可能性があります。

于 2012-05-28T17:08:39.447 に答える