0

私はこれを理解していません。Linuxでのみ発生します(私のマシンでは正常に動作します)。読んでいるファイルに特殊文字が含まれている場合にのみ発生します。これは Linux と Character.equals() の問題でしょうか?

を呼び出す別の関数内のコードHashMap.get()Hashmap.get()これは、√のような特別な文字を使用して、それぞれに「null」を出力します。

fis = new FileInputStream(fromFile);
int fromCharInt;
//read a byte at a time from the file
while ((fromCharInt = fis.read()) != -1) {
     System.out.println((char)fromCharInt);  //prints Ã
     System.out.println(hMap.get((char)fromCharInt));  //prints null
}

HashMap の生成

private static HashMap<Character, String> generateMap(HuffmanTree hTree, List<FreqTracker> freqs)
{
    HashMap<Character, String> hMap = new HashMap<Character, String>();
    BinaryNode<FreqTracker> charNode;
    for (FreqTracker freq: freqs)
    {
        charNode = HuffmanTree.findCharNode(freq.getC(), hTree.getRoot());

        hMap.put(freq.getC(), HuffmanTree.getBinaryCode(charNode, ""));
    }

    return hMap;
}
4

1 に答える 1

1

InputStream から 1 バイトを読み取っています (これが InputStreams の機能です...)。それを *Reader に変更し、正しい文字エンコーディングで開き、Reader からバイトではなく文字を読み取ります。特殊文字は通常複数バイトであり、Linux は通常デフォルトで UTF-8 エンコーディングであるため、問題が発生します

于 2013-04-28T16:23:35.647 に答える