Java get(char c)仅在linux中为特殊字符返回null

Java get(char c)仅在linux中为特殊字符返回null,java,linux,null,hashmap,Java,Linux,Null,Hashmap,我不明白。它只在linux中发生(在我的机器上运行良好)。只有当我正在读取的文件中有特殊字符时,才会发生这种情况。这可能是linux和Character.equals()的问题吗 调用HashMap.get()的另一个函数中的代码。这将使用像Ã这样的特殊字符为每个Hashmap.get()打印“null” fis = new FileInputStream(fromFile); int fromCharInt; //read a byte at a time from the file whil

我不明白。它只在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;
}
private静态HashMap generateMap(HuffmanTree-hTree,List-freqs)
{
HashMap hMap=新的HashMap();
二进制节点charNode;
用于(频率跟踪器频率:频率)
{
charNode=HuffmanTree.findCharNode(freq.getC(),hTree.getRoot());
put(freq.getC(),HuffmanTree.getBinaryCode(charNode,“”);
}
返回hMap;
}

您正在从InputStream读取一个字节(InputStreams就是这样做的…)。将其更改为*读取器,并使用正确的字符编码打开,然后从读取器读取字符,而不是字节。特殊字符通常是多个字节,Linux默认情况下通常是UTF-8编码,因此您的问题

我猜这是一个字符编码问题。Linux上的默认字符集与windows上的不同。我应该如何调试这些废话?您认为应该是什么编码,或者我如何找到答案?当我使用System.out.println(fromCharInt)来表示Ã时,我得到195。这不是只有1个字节吗?不一定,它可能是双字节\u00C3。此外,Linux文件中可能有字节顺序标记,该标记将由*Reader类正确解释。您可以尝试使用系统的默认编码:FileReader fr=newfilereader(“infle.name”);然后使用fr.read()方法。就是这样。非常感谢。要是我早10个小时发这个帖子就好了。不客气。通常,在Java中,如果使用文本数据,请始终使用读卡器和写卡器。输入/输出流仅用于二进制数据。