csv文件EXCEL默认打开乱码问题

         这里讨论的问题是,当用记事本打开带有中文字符的csv正常时,用excel打开却是乱码。

        简单概括就是:编码问题,windows的 excel打开csv文本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。如果写文件时,用的编码格式是UTF-8那么excel用GB2312打开肯定是乱码。

        一般两种方法,在文件创建时指定让Excel默认打开不乱码的编码,或者加BOM 标记(Byte Order Mark 字节顺序标记),让excel用指定的编码打开。

        所以解决的思路就很清晰:

        1.使用GB2312,gbk,gb18030这类windows下中文默认的编码。

        2.使用utf-8-sig即在文件头写入 0xEF、0xBB、0xBF,让excel识别出这是utf-8编码,用utf-8编码打开csv文件。

实例:

python 写csv文件时指定编码格式,如gb2312,gbk,gb18030,python的csv包不需要再文件头写入0xEF、0xBB、0xBF,直接指定utf-8-sig就可以。

with open('file.csv', 'w', newline='', encoding='gb18030', mode='wb') as file:  writer = csv.writer(file)  # 写入数据到CSV文件

如果是数据流返回,可以指定编码格式

"Content-Type": "application/octet-stream; charset=utf-8-sig"

写入utf-bom的csv

没有bom的utf

go 在文件头写入 BOM

func generateCSV(data [][]string) []byte {var buffer bytes.Bufferwriter := csv.NewWriter(&buffer)for index, row := range data {if index == 0 {if len(row) > 0 {// 写入 UTF-8 BOM让excel自己识别csvrow[0] = "\xEF\xBB\xBF" + row[0]}}writer.Write(row)}writer.Flush()return buffer.Bytes()
}

参考:

Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别? - 知乎

ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、BIG5 编码分析_gb18030和gbk-CSDN博客

csv 文件打开乱码,有哪些方法可以解决? - 知乎

encoding - Microsoft Excel mangles Diacritics in .csv files? - Stack Overflow

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

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

相关文章

windows11 phpstudy_pro php8.2 安装redis扩展

环境:windows11 phpstudy_pro php8.2.9 一、命令查看是否安装redis扩展 在对应网站中通过打开,,选择对应的PHP版本,用命令 php -m 查看自己的php 有没有redis扩展 上面如果有,说明已经安装了,如果没有安装&#xff1…

5 时间序列预测入门:LSTM+Transformer

0 引言 论文地址:https://arxiv.org/abs/1706.03762 1 Transformer Transformer 模型是一种用于处理序列数据的深度学习模型,主要用于解决自然语言处理(NLP)任务。它在许多 NLP 任务中取得了重大突破,如机器翻译、文本…

Servlet-Vue-JSON交互

Servlet-Vue-JSON交互 统一结果返回 定义 package org.example.result;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Result<T> {private Integer code;private St…

Android Studio 模拟器设置独立窗口

目录 模拟器在窗口内部运行 设置成独立窗口 模拟器在窗口内部运行 操作起来十分不便 设置成独立窗口 Android Studio -> Preferences(Settings) -> Tools-> Emulator ->取消勾选 Launch in a tool window -> 点击右下角的 OK 按钮 -> 重启 Android Studio

前端---CSS篇(详解CSS)

1.CSS简介 CSS(Cascading Style Sheets)层叠样式表&#xff0c;是用来为结构化文档&#xff08;HTML、XML等应用&#xff09;添加样式,比如字体、颜色、大小、间距的计算机语言。CSS目前已经发展到了CSS3.0了。 2.CSS导入方式 CSS有三种导入方式&#xff1a; 1.行内样式&am…

MySQL在Docker容器中的性能损失分析与优化策略

文章目录 1. Docker容器对MySQL性能的潜在影响1.1. IO性能1.2. 网络性能1.3. 资源隔离 2. 优化策略2.1. 使用本地数据卷2.2. 配置合理的容器网络2.3. 限制容器资源2.4. 使用容器编排工具 3. 性能测试与监控4. 结论 &#x1f389;MySQL在Docker容器中的性能损失分析与优化策略 ☆…

Positive Technologies 公司发布了一种保护容器环境的产品 PT Container Security

根据 Positive Technologies 公司的数据&#xff0c;该类产品在俄罗斯的市场容量为 25 亿卢布&#xff0c;据预测&#xff0c;到 2026 年将增长两倍 Positive Technologies 公司正在增加应用安全方面的产品组合。新产品 PT Container Security可在构建、部署和工业运行阶段自动…

[MySQL--基础]函数、约束

hello! 这里是欧_aita的频道。 今日语录:不管你觉得自己能做什么&#xff0c;或者你觉得你不能做什么&#xff0c;你都是对的。 祝福语&#xff1a;愿你的程序像太阳一样明亮&#xff0c;给世界带来温暖和光明。 大家可以在评论区畅所欲言&#xff0c;可以指出我的错误&#xf…

吴恩达《机器学习》10-6-10-7:学习曲线、决定下一步做什么

一、学习曲线 1. 学习曲线概述 学习曲线将训练集误差和交叉验证集误差作为训练集实例数量&#xff08;m&#xff09;的函数绘制而成。这意味着从较少的数据开始&#xff0c;逐渐增加训练集的实例数量。该方法的核心思想在于&#xff0c;当训练较少数据时&#xff0c;模型可能…

LeetCode Hot100 739.每日温度

题目&#xff1a; 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 方法&…

力扣2.两数相加

题目描述 把题读懂后&#xff0c;这道题存在两个需要解决的问题&#xff1a;1.进位问题&#xff1b;2.两个链表长度不一 代码 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {//创建新链表的伪指针&#xff0c;指向链表的头结点ListNode prev n…

LabVIEW通过编程将图形类控件的X轴显示为时间戳

LabVIEW通过编程将图形类控件的X轴显示为时间戳 每个版本的LabVIEW中都有属性节点&#xff0c;可以以编程方式调整X轴和Y轴格式。对于不同版本的LabVIEW&#xff0c;这些属性节点无法在同一个位置找到。请参阅以下部分&#xff0c;了解特定版本LabVIEW的相关属性节点的位置。 …

IDEA编译器的永久试用设置与基本使用

参考视频&#xff1a; 最通俗易懂的JDK、IDEA的安装使用权威指南 2023新版前端Web开发HTML5CSS3移动web视频教程&#xff0c;前端web入门首选黑马程序员 文章目录 一.安装包下载与安装二.设置IDEA永久试用三.IDEA的基本试用0.IDEA管理Java程序的结构1.工程创建2.模块创建3.包创…

郑州数字孪生技术推进制造业升级,工业物联网可视化应用加速

郑州数字孪生技术推进制造业升级&#xff0c;工业物联网可视化应用加速。数字孪生系统的特点模型数据&#xff0c;其区别于传统仿真或数字样机&#xff0c;在于结合模型&#xff0c;数字孪生体能利用大数据处理技术&#xff0c;有效对物理实体运行所产生的大数据分析处理和治理…

【2023.11.28】关于Servlet路径的学习

创建Servlet 这是Tomcat配置的初始路径&#xff0c;在web项目内&#xff0c;该路径代表了webapp下index.html所在的页面。 WebServlet(name "login", value "/login",loadOnStartup 1) public class LoginServlet extends HttpServlet { 使用注解的方…

第一百八十二回 自定义一个可以滑动的刻度尺

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何绘制阴影效果"相关的内容,本章回中将介绍 如何自定义一个可以滑动的刻度尺.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 任何优美的文字在图…

Aseprite for mac(像素动画制作工具)

Aseprite是一款专业的像素绘图软件&#xff0c;旨在方便用户创建动画和像素艺术作品。该软件提供了一系列强大的绘图工具和动画功能&#xff0c;使其成为许多游戏开发者、动画师和艺术家的首选工具之一。 Aseprite具有用户友好的界面&#xff0c;易于上手&#xff0c;使用户可以…

JSP迭代标签之 forEach循环标签 基本使用讲解

好 之前我们讲完了 我们的条件动作标签 那么 我们来继续说 迭代标签 所谓迭代就是 将某个主体循环多次 也可以循环 集合 对象 map 这个标签叫 forEach items 就是 我们要循环的数据 注意 这里 操作的也是域对象中的值 begin 开始说 例如 i 0;i<x;i begin 就是开始数 当前…

Python财经股票数据保存表格文件 <雪球网>

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.10 解释器 Pycharm 编辑器 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff0c;尽在下方&#xff0c;赶紧点击了解吧~ python源码、视频教程、插件安装教程、资料我都准备好了&…

互联网架构演变过程梳理和架构思想的学习

文章目录 版权声明业务架构单体模式中台战略去中台化 数据架构单数据库架构主从读写分库分表高速缓存数据多样化分布式文件nosql搜索引擎架构特点 应用架构单机调优动静分离SOA微服务 部署架构单机部署⻆⾊划分应⽤集群多层代理异地访问云平台 架构思想总结 版权声明 本博客的…