【问题标题】:How to add a UTF-8 BOM in Kotlin?如何在 Kotlin 中添加 UTF-8 BOM?
【发布时间】:2020-07-07 11:09:00
【问题描述】:

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

到目前为止,文件已生成如下:

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

但这并不能提供按需提供 BOM 的可能性。

注 1:

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

注2:

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

【问题讨论】:

  • 你可以尝试在源中添加“\xEF\xBB\xBF”吗?
  • @maio290 我可以试试.. 类似.writeByte(byteArrayOfInts(0xEF, 0xBB, 0xBF)。但也许有更 Kotlin 的方式来做这件事,对吧?

标签: java kotlin utf-8 byte-order-mark


【解决方案1】:

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

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

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

【讨论】:

  • 不仅仅是“人”。它是 Unicode:不要将 BOM 放在 UTF-8 中,但如果原始文件有 BOM,则可以将 BOM 放在 UTF-8 中(如果需要转换回原始字符集,请保留这些信息)。
猜你喜欢
  • 2011-05-22
  • 2011-03-08
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2018-10-28
相关资源
最近更新 更多