【问题标题】:Java reading a text file by character - unicode 254 and 255 appears out of nowhereJava按字符读取文本文件-unicode 254和255突然出现
【发布时间】:2012-09-13 01:50:31
【问题描述】:

从下面的代码中,我读取了一个包含字符“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

【问题讨论】:

    标签: java file unicode text-files bufferedreader


    【解决方案1】:

    您遇到了Byte Order Mark,即 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!)

    【讨论】:

    • 谢谢,顺便问一下,我如何在 java 的转义序列中表示 U+FEFF? @Jonas Wielicki
    猜你喜欢
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多