2 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
我認(rèn)為您的示例不正確,因?yàn)槟鷮?aZipOutputStream
直接傳遞給CsvWriter
. 假設(shè)您使用的是 OpenCSV,則CsvWriter
構(gòu)造函數(shù)需要 a Writer
,而不是OutputStream
.
在 Java 中,I/O 流要么是字節(jié)流,要么是原始數(shù)據(jù);或字符流,由 Unicode 字符組成。為了從一個(gè)轉(zhuǎn)換到另一個(gè),您必須提供一個(gè)字符編碼,它告訴它如何將字符轉(zhuǎn)換為字節(jié)/從字節(jié)轉(zhuǎn)換。(如果你不提供,那么 Java 將使用默認(rèn)的字符編碼——這取決于平臺(tái),但通常是 UTF-8。)InputStream
并且OutputStream
是字節(jié)流,而相應(yīng)的字符流稱為Reader
和Writer
。
你有一個(gè)ZipOutputStream
,它是一個(gè)字節(jié)流。OpenCSVCsvWriter
構(gòu)造函數(shù)需要一個(gè)Writer
, 一個(gè)字符流,這是有意義的,因?yàn)?CSV 是一種文本格式。(我想這對(duì)其他CsvWriter
實(shí)現(xiàn)也是如此。)您應(yīng)該將您的實(shí)例包裝ZipOutputStream
在 的實(shí)例中OutputStreamWriter
,這會(huì)將 CSV 字符轉(zhuǎn)換為字節(jié)。OutputStreamWriter
您可以在構(gòu)造函數(shù)中指定字符編碼。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
從文檔:
charset - 用于對(duì)條目名稱和注釋進(jìn)行編碼的字符集
因此,設(shè)置 UTF-8 對(duì)已經(jīng)必須是字節(jié)流的內(nèi)容沒有任何影響。
問題必須發(fā)生在CsvWriter
.
添加回答
舉報(bào)