Java使用CsvMapper写入CSV文件时部分字段双引号丢失问题咨询
问题根因
你使用的Jackson Dataformat CSV组件默认采用MINIMAL引号策略,该策略仅在字段值包含CSV特殊字符(逗号、双引号、换行符、首尾空白符、制表符等)时,才会自动用双引号包裹字段值,无特殊字符的字段会省略引号,这是符合CSV RFC标准的正常设计。
你看到前两个accountName加了引号,说明这两个值的实际内容隐含了你未注意到的特殊字符(比如首尾空格、不可见换行符等),而后两个test3、test4为纯普通字符,因此没有触发加引号的逻辑。
修复方案
如果需要强制所有字段(或所有字符串字段)都加双引号,只需要在构造CsvSchema时显式指定引号模式即可,修改写入代码的schema构造部分:
schema = schemaBuilder.build() .withLineSeparator("\r") .withHeader() // 强制所有字段都用双引号包裹,可根据需求替换为其他模式 .withQuoteMode(CsvSchema.QuoteMode.ALL);
可选引号模式说明
MINIMAL:默认值,仅包含特殊字符的字段加引号ALL:所有字段统一加双引号NON_NUMERIC:仅非数字类型的字段加双引号NON_NULL:仅值不为null的字段加双引号
补充说明:默认的引号策略不会影响CSV读取逻辑,Jackson的CSV读取器本身就兼容带引号和不带引号的合法CSV字段,无需修改你现有的读取代码。
内容的提问来源于stack exchange,提问作者Hanh Nguyen
相关产品推荐
相关产品推荐

