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 であるByte Order Markに遭遇しました。これは、個別のバイトとして読み取ると、254 および 255 に相当します。

これは (null の発生と合わせて) ファイルがUTF-16またはUCS-2 (別名 widestring、wchar など) でエンコードされていることをおそらく意味します。それが何を意味するのかわからない場合は、ユニコードエンコーディングについて読んでおくことをお勧めします。このために、素晴らしい記事The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)をお勧めします。

于 2012-09-20T16:37:17.767 に答える