问问题
156 次
2 回答
2
据我所见,大多数人对他们的 ra.xml 使用 UTF-8 编码。但是,使用其他编码没有限制。因此,如果您的解析仅基于 UTF-8,则结果可能与预期不同。
因此,当您将其作为普通文本阅读时,您要么需要在代码中计算这一点,要么将其作为 xml 文件阅读,以免头疼。我认为性能差异不会成为问题,因为 ra.xml 文件通常不会增长到千兆字节。至少到目前为止我看到的那些平均只有几兆字节。
对于 Findbug 问题,您只需将编码指定为 UTF-8。否则,您将使用在虚拟机启动期间确定的 JVM 默认值,通常取决于底层操作系统的语言环境和字符集。虽然这里不推荐使用默认值,但如果这是您想要的,那么只需指定默认编码的用法。这将摆脱 Findbug 问题。
所以你的代码看起来像这样:
01. byte[] contents = new byte[1024];
02. int bytesRead = 0;
03. while ((bytesRead = bin.read(contents)) != -1)
04. result.append(new String(contents, 0, bytesRead, Charset.defaultCharset()));
于 2015-05-21T13:56:26.553 回答
1
FindBugs 只是警告您您依赖于默认系统编码,因此如果您的应用程序将由另一个国家/地区的其他用户启动,您可能会得到意想不到的结果。最好明确指定要使用的编码。
在您的情况下,应从 XML 文件中提取实际编码。有几种方法可以得到它。一种方法是XMLStreamReader
按照此答案中的说明使用。
于 2015-05-13T17:47:11.997 回答