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 读取单个字节(这就是 InputStreams 所做的......)。将其更改为 *Reader 并使用正确的字符编码打开它,并从 Reader 读取字符,而不是字节。特殊字符通常是多个字节,Linux 默认情况下通常是 UTF-8 编码,因此您的问题

于 2013-04-28T16:23:35.647 回答