我有问题。我认为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。
答案 0 :(得分:1)
问题是BufferedReader正在读取您的BOM。序列-17, -69, -65
只是UTF-8的BOM。但是文字"Test"
不包含BOM,因此字符串不相等。