【发布时间】:2017-03-31 21:36:29
【问题描述】:
我有问题。我认为 Java 字符串总是编码为 UTF-16?现在我有一个带有文本“TEST”的文件,它使用 UTF-8 编码并带有 BOM。当我使用 Files.newBufferedReader(test_file) 从文件中读取数据时,它会给我一个带有 UTF-8 和 BOM 编码的字符串。
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 中有两个不同编码的字符串...
问题是,我需要“s”作为HashMap<String, String> 的键。但关键是“TEST”,s.equals("TEST") 返回 false,因此当我尝试 mymap.get(s) 时,HashMap 返回 null。
【问题讨论】:
-
s.getBytes()使用未指定的平台默认编码,可以是 UTF-8、ASCII 或 任何东西。 调用String.getBytes()真的不是 100% 好主意没有争论。但实际上,打印出s。 (s可以有隐形字符吗?坦率地说,它看起来可能。)
标签: java string file-io encoding utf-8