首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jackson CsvMapper中使用自定义字符集

在Jackson CsvMapper中使用自定义字符集
EN

Stack Overflow用户
提问于 2020-09-08 08:15:43
回答 1查看 1.6K关注 0票数 0

是否可以在杰克逊CsvMapper中使用自定义编码?我需要CSV用Windows1252编码,而不是默认的UTF-8.

下面是我的代码的简化版本:

代码语言:javascript
复制
class CSVService(private val mapper: CsvMapper) {
   
  fun <T : CsvResponse> writeAsCSV(result: List<T>, resultClass: KClass<T>, separatorChar: Char = ',', encoding: Charset = Charsets.WINDOWS_1252): String {
    mapper.schemaFor(resultClass.java).withHeader().withColumnSeparator(separatorChar)
    return mapper.writeValueAsBytes(result).toString(encoding) // does not work. 
  }

}

看起来对象映射器writeValueAsBytes方法有UTF-8硬编码。有人能展示如何配置对象映射器来使用不同的编码吗?

提前谢谢。任何帮助都是非常感谢的。

使用com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.11.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-08 10:58:57

Javadoc指定writeValueAsBytes编码方法强制为UTF-8.

要定制字符集,您必须创建一个内存中的写入器作为中间输出。

示例:

代码语言:javascript
复制
val buffer = ByteArrayOutputStream()
OutputStreamWriter(buffer, encoding).use {
    mapper.writeValue(it, result) 
}
val bytes = buffer.toByteArray();

编辑

再看一看,我看到您尝试将字节数组读入字符串。该操作将中断任何自定义编码的工作。Java内部系统对文本表示使用UTF-16编码,而作为toString(encoding)输入提供的编码可以从原始字符集(在默认情况下是窗口)解码字节。

它不会为进一步的写作服务,因为是作者负责编码,而不是内容。因此,一旦编写了字节数组,要么按原样返回它,要么在最后的编码器后面自定义编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63789835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档