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
.
添加回答
举报