使用 BOM 将 UTF-8 数据转换为 UTF-16

Converting UTF-8 data to UTF-16 with BOM

提问人:Jerryyyz 提问时间:7/6/2023 最后编辑:Adam MillerchipJerryyyz 更新时间:7/22/2023 访问量:140

问:

我有一个变量,它包含我需要的所有数据。我想将此数据转换为我希望 Excel 通过打开文件来识别数据,而无需按钮。csvUTF-16LEGet Data

我尝试使用此解决方案,虽然 LibreOffice Calc 确实识别它是一个文件,但 Excel 无法正确解码希腊字符。UTF-16

这是我拥有的 JavaScript 代码:

csv = csvRows.join('\r\n')

      var byteArray = new Uint8Array(csv.length * 2);
      for (var i = 0; i < csv.length; i++) {
        byteArray[i * 2] = csv.charCodeAt(i) // & 0xff;
        byteArray[i * 2 + 1] = csv.charCodeAt(i) >> 8 // & 0xff;
      }

      var blob = new Blob([byteArray], { type: 'text/csv', encoding: "UTF-16LE" });
      var url = URL.createObjectURL(blob);
      sendFileToClient(url, this.el.id + ".csv")

我在 Elixir 中遇到的类似问题,我通过使用这样的模块解决了这个问题::unicode

csv =
      :unicode.characters_to_binary(
        :unicode.encoding_to_bom(:utf8) <> build_csv(data),
        :utf8,
        {:utf16, :little}
      )

我还尝试在文件的开头添加一个 BOM 字符,但这会使其被识别为文件(根据 Notepad++)。当我尝试将“UTF-BOM字符”转换为不同的字母时。\uFEFFUTF-8 BOM\uFFFE

LibreOffice Calc 在没有 BOM 的情况下打开文件

LibreOffice Calc 使用 \ufeff BOM 打开文件

Excel 在没有 BOM 的情况下打开文件

Excel 使用 BOM 打开文件

javascript csv utf-8 utf-16

评论

1赞 Giacomo Catenazzi 7/6/2023
注意:Excel 可以毫无问题地读取 UTF-8 文件。因此,问题可能与编码无关。常见问题:分离器。CSV 通常使用逗号,但在许多区域设置上,Excel 默认需要其他字符。(使用特殊的第一行,您可以设置分隔符,但文件是一行,具有自己的格式 + 所有其余部分作为 CSV 数据。或数字中的千位分隔符,或小数点。签入文本编辑器。尝试只使用简单的整数(以删除大多数变量)。

答:

0赞 Jerryyyz 7/10/2023 #1

在将内容转换为 UTF-16 之前,我通过添加 UTF-8 BOM 解决了这个问题。