我正在使用 .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()
2 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
我认为您的示例不正确,因为您将 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
您可以在构造函数中指定字符编码。
神不在的星期二
TA贡献1963条经验 获得超6个赞
从文档:
charset - 用于对条目名称和注释进行编码的字符集
因此,设置 UTF-8 对已经必须是字节流的内容没有任何影响。
问题必须发生在CsvWriter
.
添加回答
举报
0/150
提交
取消