0

从下面的代码中,我读取了一个包含字符“a”(unicode 97)的文本文件

int ini ; 
    // Buffered Reader Text file read per character
    while((ini=jer.read())!=(-1)){
        char inp = (char)ini;
        System.out.println(inp);
        if (listahan.containsKey(inp)) {
                listahan.put(inp,listahan.get(inp) + 1);
            } else {
                listahan.put(inp, 1);
            }
    }
// ENHANCED FOR LOOP FOR DISPLAYING IN CONSOLE
for (Map.Entry<Character, Integer> e : listahan.entrySet()){
    System.out.printf("%1d.) %-15s : %-3d%n", ctr++, e.getKey(), e.getValue());

}

输出是:

1.)                 : 1  // (must be a null)
2.) a               : 1  
3.) þ               : 1  
4.) ÿ               : 1  

为什么输出不像这个?:

1.) a                 :1
4

1 回答 1

4

您遇到了一个字节顺序标记,即 U+FEFF,即,当作为单独的字节读取时,相当于 254 和 255。

这(连同 null 的出现)可能意味着文件以UTF-16UCS-2(又名宽字符串、wchar、...)编码。如果您不知道这意味着什么,我建议您阅读 unicode 编码。为此,我推荐伟大的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

于 2012-09-20T16:37:17.767 回答