2 Java Strings采用不同的编码方式?

时间:2017-03-31 21:36:29

标签: java string file-io encoding utf-8

我有问题。我认为Java-Strings总是编码为UTF-16?现在我有一个带有文本" TEST"的文件,它以带有BOM的UTF-8编码。当我使用Files.newBufferedReader(test_file)从文件中读取时,它为我提供了一个带有BOM编码的UTF-8字符串。

try (BufferedReader reader = Files.newBufferedReader( test_file )){
    reader.lines().forEach( 
        s -> {
            System.out.println( Arrays.toString( s.getBytes() ) );
            System.out.println( Arrays.toString( "TEST".getBytes()) );
            System.out.println( s.equals("TEST") );
        } );
} catch( Exception e ) {}

我在这里没有指定任何编码。但奇怪的是,输出看起来像这样:

[-17, -69, -65, 84, 69, 83, 84]
[84, 69, 83, 84]
false

这怎么可能?看起来我在Java中有两个不同编码的String ...

问题是,我需要&#34; s&#34;作为HashMap<String, String>的关键。但关键是&#34; TEST&#34;并且s.equals("TEST")返回false,因此当我尝试mymap.get(s)时,HashMap返回null。

1 个答案:

答案 0 :(得分:1)

问题是BufferedReader正在读取您的BOM。序列-17, -69, -65只是UTF-8的BOM。但是文字"Test"不包含BOM,因此字符串不相等。