如何在 Kotlin 中添加 UTF-8 BOM?

How to add a UTF-8 BOM in Kotlin?

我需要生成文本数据文件,都带有 UTF-8 字节顺序标记不带它。我该怎么做?

至此文件生成如下:

File(fileName).writeText(source, Charsets.UTF_8)

但这并没有提供按需获得 BOM 的可能性。

注1:

在这个问题中How to add a UTF-8 BOM in java使用了BufferedWriterPrintStream.print(),但这意味着将代码的生成更改为更面向Java的方式(这是最后一个选项)。

注二:

在 2012 年的另一个问题 Java: UTF-8 and BOM 中,指出了一个 Java BOM 未处理的错误。在评论中建议永远不要使用 BOM,但在我的情况下这不是一个选项,因为文件被发送到不同的服务,其中一些需要它,而另一些则不需要。有人知道这方面的最新消息吗?如果适用于科特林?

BOM 是单个 Unicode 字符,U+FEFF。如果需要,您可以自己轻松添加。

File(fileName).writeText("\uFEFF" + source, Charsets.UTF_8)

更难的部分是当文件读回时 BOM 不会自动剥离。这就是为什么人们建议不要在不需要时添加 BOM。