网站首页 > 博客文章 正文
什么是CSV文件?
英文名:Comma Separator Value(逗号分隔值),常用来数据转换的中间文件存在,比如:从Mysql中导出数据到CSV中。在web系统中经常遇到要导出报表数据,也会用到csv格式,使用utf-8编码导出CSV文件,打开后里边的中文成了乱码 (Windows下CSV文件默认与Microsoft Excel关联),用文本编辑器打开正常,不过排版很乱。原因:缺少BOM,又是微软画蛇添足。
什么是BOM?
Byte Order Mark(比特序标记),微软定义的一种头部结构。
为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE字符开头。这作为一个”特征符”或”字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序(big-endian或little-endian),具体的对应关系见下表。
Bytes Encoding Form
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8
类Unix系统中并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。
我们在使用PHP导出csv文件时, 如果只使用file_put_contents 或者 fwrite 写入了表格数据, 而我们生成csv的平台不一定遵循微软的bom协议,导致如果输出非unicode编码的csv文件(例如utf-8),并且没有生成bom信息的话,Excel自动按照unicode编码读取,就会出现乱码问题了。而没有写入BOM头信息,就会出现打开中文乱码的情况。
PHP中文乱码解决
Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取。
如果想使用utf-8格式,确保php源码是utf-8,我们可以在第一行写入utf-8对应的BOM信息
代码如下:
$bom = pack('CCC', 0xef, 0xbb, 0xbf); // 和上面的对应
file_put_contents('pythontab.csv',$bom, FILE_APPEND);
file_put_contents('pythontab.csv',$someData, FILE_APPEND); //写入你想要写入表格的数据
前后都省略了部分代码, 只写了最关键的部分, 其它部分大家自行补充即可。
这样生成的csv就不会出现中文乱码问题啦。
注意:写入的BOM头信息要和文件的编码对应。
猜你喜欢
- 2025-03-28 提高 PHP 代码质量的 36 计(php提升)
- 2025-03-28 Swoole学习八Hyperf做一个Excel异步导出服务
- 2025-03-28 产品经理提需求时要考虑的 15 个隐性需求
- 2025-03-28 网站后台莫名增加N个管理员,记一次SQL注入攻击
- 2025-03-28 如何让Word、Excel文件显示内容的缩略图,而不是图标!
- 2025-03-28 8个可以让你自学成才的网站,质量高且免费,自学改变一生
- 2025-03-28 5个小众又实用的网站,忍不住分享,每个都让你相见恨晚
- 2025-03-28 如何通过PhpSpreadsheet操作Excel文档
- 2025-03-28 mysql怎么导入excel数据?(mysql导入表格数据)
- 2025-03-28 免费分享一份完整的PHPExcel视频教程
你 发表评论:
欢迎- 374℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 369℃用AI Agent治理微服务的复杂性问题|QCon
- 360℃初次使用IntelliJ IDEA新建Maven项目
- 353℃Maven技术方案最全手册(mavena)
- 351℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 349℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 348℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 344℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)