在 Groovy™ 中处理字节顺序标记字符

作者: Paul King

发布时间:2024-07-11 晚上 08:00


最近一篇文章展示了在 Java 编程时如何处理文本文件中的字节顺序标记 (BOM) 字符。特别地,在处理文本文件时通常需要手动删除这些字符。文章展示了如何在使用 InputStreamReader 类时删除 BOM 字符,以及如何使用 NIO 功能删除。它还展示了如何使用 Apache Commons IO 中的 BOMInputStream 类。它会自动跳过 BOM 字符。

这些示例可以在 Groovy 中原样运行(尽管在第一个示例中修复了一个错误),但 Groovy 中(完整的!)惯用解决方案是

println new File('file.txt').text

没错,Groovy 在使用 getText() 方法以及其他方法(如 eachLinesplitEachLinereadLineswithReaderfilterLine)时,会自动检测编码并删除 BOM 字符。通过在文件和 URL 上使用 newReader 方法,也可以获得相同的功能。

如果需要,有一些变体允许您指定编码,以便您希望显式声明它。在这种情况下,您需要手动处理 BOM 字符。

Groovy 的方法(如 getText)会调用底层 CharsetToolkit 类。如果您想了解更多关于文件编码的信息,也可以直接使用该类。