org.apache.commons(commons-csv)下载CSV增加BOM头

news2024/11/26 4:32:17

网络说明

在这里插入图片描述

代码说明

依赖

<!--https://mvnrepository.com/artifact/org.apache.commons/commons-csv-->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.8</version>
        </dependency>

方法

	@GetMapping("/export-csv")
    public void exportCsv(HttpServletResponse response) throws IOException {
        String [] headers = {"数据来源", "基线数据", "数据日期"};
        String fileName = "data-gee-集合.csv"; // CSV 文件名
        fileName = URLEncoder.encode(fileName, "UTF-8");
        response.setContentType("text/csv;charset=UTF-8");
        response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileName + "\"");
        response.setCharacterEncoding("UTF-8");
        OutputStream outputStream = response.getOutputStream();
        outputStream.write(new byte[]{(byte)0xEF, (byte)0xBB, (byte)0xBF});

        try (CSVPrinter printer = new CSVPrinter(new OutputStreamWriter(outputStream, "UTF-8"), CSVFormat.DEFAULT.withHeader(headers))) {
            printer.printRecord("中文", "data2", LocalDate.now());
            printer.printRecord("中文", "data5", LocalDate.now());
            printer.flush();
        };
    }

解释

这段代码用于在输出CSV文件时,向输出流中写入BOM(Byte Order Mark)头,以解决Excel打开CSV文件乱码的问题。BOM头是一个特殊的字符,它通常用于标识文本文件使用的编码方式。

在使用UTF-8编码保存CSV文件时,如果在文件头部写入BOM头,那么在Excel中打开CSV文件时,Excel会识别文件头中的BOM头信息,自动使用UTF-8的编码方式来解析CSV文件内容。因此,将BOM头写入CSV文件是解决Excel打开CSV乱码问题的常用方法之一。

代码中的new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF}就是BOM头的字节表示形式,其中0xEF, 0xBB, 0xBF分别表示BOM头的3个字节,它们对应的16进制表示为0xEFBBBF。

因此,调用outputStream.write()方法向输出流中写入BOM头时,实际就是将BOM头的字节数组写入到输出流中,告诉Excel打开这个CSV文件时使用UTF-8编码方式来读取文件内容,以解决乱码问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习笔记-第9单元 异常处理

第9单元 异常处理 文章目录 第9单元 异常处理单元导读9.1 异常处理概览9.1.1 异常处理概览9.1.2 异常处理机制的优点 9.2 异常匹配与内建异常类9.2.1 异常匹配与异常类9.2.2 内建异常类 9.3 自定义异常类与多重捕获9.3.1 自定义异常类9.3.2 捕获多种无关异常9.3.3 捕获派生异常…

C#Winform 中tabcontrol 美化实例

本篇讲解tabcontrol 美化实例,我们项目开发中为了保持项目界面的风格的一致性,需要美化tabcontrol控件,系统自带的控件样式不能更改,无法满足需求。 先看效果 实现过程 创建winform项目,添加组件类控件 修改名称,点击添加 cs代码 using System.Drawing; using Sys…

TX Text Control .NET for WPF 31.SP3 Crack

.NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款免版税、完全可编程的丰富编辑控件&#xff0c;它在专为 Visual Studio 设计的可重用组件中为开发人员提供了广泛的文字处理功…

Spring Native 实现 0.059s 启动一个SpringBoot项目!

前言 最近自己用Spring Cloud Alibaba做了一个微服务架构的项目&#xff0c;部署的时候遇到了难题&#xff1a;内存不够。目前该项目有7个微服务&#xff0c;因为我只有一台阿里云的服务器(2C 4G)&#xff0c;所以我只能把所有的微服务部署在一台服务器上&#xff0c;部署方式…

uni-App踩坑记录

​ 1、uni自己封装的axios在真机中失效&#xff0c;发不出请求 uniapp中使用axios 需要配置适配器 (添加适配器有点费劲&#xff0c;直接封装uni自带请求也可以) axios-adapter-uniapp传送门 axios.defaults.adapter function(config) { //自己定义个适配器&#xff0c;用来…

JS获取表单保存的时候发送到server端的xml

var dataXml Xrm.Page.data.entity.getDataXml(); alert(dataXml); JS获取表单保存的时候发送到server端的xml。

一文读懂Unreal Engine游戏引擎如何提高数字孪生场景渲染能力

以下案例来自于《数字孪生世界白皮书&#xff08;2023版&#xff09;》 领取方式&#xff1a;公众号「EasyV数字孪生」后台回复「白皮书」即可领取&#xff01; Unreal Engine&#xff08;下文简称为UE&#xff09;&#xff0c;是一款由Epic Games开发的游戏引擎&#xff0c;…

100天精通Python(可视化篇)——第94天:Pyecharts绘制多种炫酷散点图(参数说明+代码实战)

文章目录 专栏导读一、Scatter&#xff08;散点图&#xff09;1. add函数2. 数据项 二、基础气泡图三、多维度散点图四、添加分割线五、动态涟漪散点图六、不同形状散点图七、3D散点图 专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#…

CentOS7 图形化方式安装 Oracle19C

CentOS7 图形化方式安装 Oracle19C 操作系统&#xff1a;CentOS7 Oracle&#xff1a; 19C 远程连接工具&#xff1a;Xmanager Power Suite 7 安装常用工具和依赖 yum -y install vim tar net-tools wget perl python3 readline* deltarpm python-deltarpm \zip unzip bc compa…

天翎群晖NAS为全文检索插翅起飞

编者按&#xff1a;企业的文档资料随着企业的业务发展会越来越多&#xff0c;想要某个资料的时候&#xff0c;最怕找不到想要的资料&#xff0c;这时KMS的全文检索功能就非常重要了&#xff0c;只需只言片语的零星关键字&#xff0c;查找文档没压力。 关键词&#xff1a;全文检…

Liunx服务器磁盘挂载

一&#xff1a;查看磁盘信息 [rootxxx ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom vda 253:0 0 100G 0 disk ├─vda1 …

【动态规划算法】第三题:746.使用最小花费爬楼梯

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 &#x1f389;作者宣言&#xff1a;认真写好每一篇博客 &#x1f38a;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作…

能代替纸质笔记本的记录软件哪个好?

在很长一段时间里&#xff0c;纸质笔记本一直是我们记录信息的常用工具。然而随着记录需求的不断增加&#xff0c;纸质笔记本也暴露了一些不足之处。首先&#xff0c;它们的存储容量有限&#xff0c;很难管理大量的笔记。其次&#xff0c;如果纸质笔记本遗失或损坏&#xff0c;…

上门家政小程序|上门保洁APP|家政服务预约上门软件开发

上门家政小程序对于上门保洁服务非常方便。下面是一些简单介绍&#xff1a;   预约便捷&#xff1a;通过上门家政小程序&#xff0c;用户可以随时随地进行保洁服务的预约。无论是在家中、办公室还是旅途中&#xff0c;用户只需打开小程序&#xff0c;选择合适的日期和时间&am…

zabbix基础1——发展起源、基础安装、配置文件参数释义

文章目录 一、基本了解二、配置文件详解2.1 服务端配置文件2.2 客户端配置文件 三、源码安装3.1 安装服务端3.2 配置web前端文件3.3 访问网页 一、基本了解 前提背景&#xff1a; Zabbix是一个企业级分布式开源监控解决方案&#xff0c;由 Alexei Vladishev 创建&#xff0c;目…

gitee配置ssh公钥免密登录

如下配置&#xff0c;即可让本电脑直接推送gitee&#xff0c;而无需输入码云的密码 下载git配置用户名&#xff1a;git config --global user.name “zhangsan” //以后的提交人就是这个名字配置邮箱&#xff1a;git config --global user.email “zhangsanqq.com” //注册账号…

C# 在控制台整齐的输出 DataTable

效果: 一、前言 在 Winform 平台,可以用 DataGridView 这样的控件来显示数据库的表单数据,但在 C# 控制台项目中,如果有用到数据库查询,我们想看看查询语句的效果,就比较困难了,比如,我随意写了一个控制台输出,代码如下: using System.Data;namespace CSharpConnec…

使用 Elasticsearch

了解如何创建索引&#xff0c;添加&#xff0c;删除&#xff0c;更新文档 参考文档 开始使用 Elasticsearch 1 本文用到Elasticsearch和Kibana 可以看之前的两篇先安装好 Elasticsearch 安装 Kibana安装 Elasticsearch 里的接口都是通过 REST 接口来实现的。 GET 读取数…

matlab——制作箱线图

在数据分析中&#xff0c;如果不知道数据分布的情况下很难判断中位数是否有效或者存在离群点。 离群点指偏离大多数点规律的点。 为了更有效对整体数据进行划分&#xff0c;提出四分位点的概念。即选取概念下界、0.25位点、0.75位点、概念上界。 有一种专门表现四分位点的图像叫…

@Import注解源码解析

文章目录 一、简介二、Import注解的几种用法三、Import注解源码解析1、ConfigurationClassPostProcessor2、ConfigurationClassPostProcessor 类的 postProcessBeanDefinitionRegistry 方法3、ConfigurationClassParser 类的 parse 方法4、处理 ImportBeanDefinitionRegistrar …