UTF-8 不适用于 Java zipOutputStream

我正在使用 .csv 生成一个包含 csv 的 zip 文件ZipOutputStream。我已经通过了编码 UTF-8 但问题是德语变音符号没有正确压缩。未压缩时,它们不会正确显示在文件中。


我不确定问题是压缩本身还是解压缩。


与此问题相关的所有主题主要是关于文件名中的特殊字符,但对我而言,问题出现在数据中。


   val zos = ZipOutputStream (outputStream, StandardCharsets.UTF_8)

        val entry = ZipEntry("file1.csv")

        zos.putNextEntry(entry)


        val writer = CsvWriter(zos)


        for (entr in data)

            writer.appendRow {entr.forEach { write(it) }}

        zos.closeEntry()

    zos.close()


动漫人物
浏览 297回答 2
2回答

喵喵时光机

我认为您的示例不正确,因为您将 aZipOutputStream直接传递给CsvWriter. 假设您使用的是 OpenCSV,则CsvWriter构造函数需要 a Writer,而不是OutputStream.在 Java 中,I/O 流要么是字节流,要么是原始数据;或字符流,由 Unicode 字符组成。为了从一个转换到另一个,您必须提供一个字符编码,它告诉它如何将字符转换为字节/从字节转换。(如果你不提供,那么 Java 将使用默认的字符编码——这取决于平台,但通常是 UTF-8。)InputStream并且OutputStream是字节流,而相应的字符流称为Reader和Writer。你有一个ZipOutputStream,它是一个字节流。OpenCSVCsvWriter构造函数需要一个Writer, 一个字符流,这是有意义的,因为 CSV 是一种文本格式。(我想这对其他CsvWriter实现也是如此。)您应该将您的实例包装ZipOutputStream在 的实例中OutputStreamWriter,这会将 CSV 字符转换为字节。OutputStreamWriter您可以在构造函数中指定字符编码。

神不在的星期二

从文档:charset - 用于对条目名称和注释进行编码的字符集因此,设置 UTF-8 对已经必须是字节流的内容没有任何影响。问题必须发生在CsvWriter.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java