解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题

解决PHP导出CSV文件中文乱码问题 (逗号分隔值),常用来数据转换的中间文件存在,比如:从Mysql中导出数据到CSV中。在web系统中经常遇到要导出报表数据,也会用到csv格式,使用utf-8编码导出CSV文件,打开后里边的中文成了乱码 (Windows下CSV文件默认与关联),用文本编辑器打开正常,不过排版很乱。原因:缺少BOM,又是微软画蛇添足。(比特序标记),微软定义的一种头部结构。为了识别Unicode文件,Microsoft 建议所有的 Unicode 文件应该以字符开头。这作为一个”特征符”或”字节顺序标记( 阅读详情

时间:2018-10-08 10:25:27

这次又遇到这个问题了, 在网上一番寻找, 在一篇java的文章里找到了原因, 是由于输出的CSV文件中没有BOM.

   什么是BOM?

   在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。
   UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
   Windows就是使用BOM来标记文本文件的编码方式的。

那么如何在PHP中输出BOM呢?

在所有内容输出之前

   print(chr(0xEF).chr(0xBB).chr(0xBF));

$arrReturn = [];//数据内容    
ob_start();
$file = fopen("php://output", 'w');
//Windows下使用BOM来标记文本文件的编码方式  
fwrite($file,chr(0xEF).chr(0xBB).chr(0xBF));
$arrTitle = [
    'XXXID',
    'XXX',
    'XXX',
    'XXX',
    'XXX',
    'XXX',
    'XXX',
    'XXX',
];
fputcsv($file, $arrTitle);
foreach($arrReturn as $k=>$v) fputcsv($file, $v);

$file_name = date('YmdHi',time()).'XXXXX.csv';
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes"); #告诉客户端浏览器返回的文件大小是按照字节进行计算的
header("Content-Disposition:attachment;filename=" . $file_name);
echo fread($file,999999);
fclose($file);

PHP输出CSV文件时遇到乱码问题的解决方案 当使用PHP的fputcsv函数将数据写入CSV文件时,如果数据中包含非ASCII字符(如中文、日文、俄文等),在某些情况下会导致CSV文件中的文本显示为乱码字符。在上面的示例中,我们首先设置了适当的字符编码和BOM,然后使用fopen函数打开一个名为output.csv的文件,将数据写入CSV文件。然而,有时在输出CSV文件时会出现乱码问题,即CSV文件中的文本显示为乱码字符。确保PHP脚本和CSV文件都使用相同的字符编码,并进行正确的字符编码转换,有助于确保CSV文件中的文本能够正确显示。 阅读详情

相关推荐

php和mysql中uft-8中文编码乱码的几种解决办法

PHP页面转UTF-8编码问题 1.在代码开始出加入一行: 复制代码 代码如下: header(“Content-Type: text/html;charset=utf-8”); 2.PHP文件编码问题 点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8, 如果是ANSI,需要将编码改成:UTF-8。 3.PHP文件头BOM问题: PHP文件一定不可以有BOM标签 否则,会出现session不能使用的情况,并有类似的提示: Warning: session_start() [function.session-start]: Cannot send s

excel 导入文本数据乱码问题

1、数据导入 打开 Excel,执行“数据”->“自文本”,选择 CSV 文件,出现文本导入向导,选择“分隔符号”,下一步,勾选“逗号”,去掉“ Tab 键”,下一步,完成,在“导入数据”对话框里,直接点确定。 导入之后,所有汉字显示正常,乱码问题解决。 2、先另存再打开 使用记事本打开CSV文件,“文件”->“另存为”,编码方式选择ANSI,保存完毕后,用EXCEL打

世界中心的专栏 2万+

【数据分享】中国371个城市的坡度矢量数据和excel数据

在城市发展的进程中,地形地貌始终是影响规划决策的关键因素,而坡度作为表征地表倾斜程度的核心指标,更是贯穿于城市建设、生态保护等诸多环节。本文将全面解读中国 371 个城市坡度数据的相关情况,包括数据概况、生成流程、应用场景等内容,为读者呈现一份详尽的坡度数据指南。

qq_39719713的博客 1844

解决Excel打开UTF-8编码CSV文件乱码的问题_excel utf8,2024年最新Golang高级面试

因为excel打开文件时默认使用unicode的编码方式(还有的网友说是默认以ANSI编码方式打开,待考)。打开 Excel,执行“数据”->“自文本”,选择 CSV 文件,出现文本导入向导,选择“分隔符号”,下一步,勾选“逗号”,去掉“ Tab 键”,下一步,完成,在“导入数据”对话框里,直接点确定。最近在用QT读写CSV文件,发现将数据写入到CSV文件中,使用记事本打开文件是正常的,使用Excel打开,中文是乱码的,下面把原因和解决方法记录一下。

2401_84247423的博客 2198

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 521

PLc S7-200 smart如何使用Modbus 485通讯传输接收数据

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器,从而实现PLC通过modbus方式控制其他器件。提示:以下是本篇文章正文内容,下面案例可供参考。

xjbsw0的博客 6万+

如何解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题

为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE字符开头。这作为一个”特征符”或”字节顺序标记(byte-order mark,BOM)”来识别文件中使用的编码和字节顺序(big-endian或little-endian),具体的对应关系见下表。 Bytes Encoding Form00 00...

apple20141201的博客 204

国科大 雁栖湖校区 研一上 课程避坑与生存指南

本文为国科大雁栖湖校区研一新生提供全面的课程避坑与生存指南,涵盖选课策略、核心课程学习技巧、校园生活攻略及心态管理。重点解析算法设计与分析、人工智能原理等硬核课程的学习方法,并分享食堂、住宿、自习室等实用生存技巧,帮助新生高效适应研究生生活。

weixin_29304985的博客 300

php excel编码_解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题

这次又遇到这个问题了, 在网上一番寻找, 在一篇java的文章里找到了原因, 是由于输出的CSV文件中没有BOM.什么是BOM?在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAKSPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZEROWIDTH NO-BREAKSPACE”。这样如...

weixin_31109487的博客 259

Python实战:用SkillMetrics库5分钟搞定泰勒图绘制(附完整代码)

本文详细介绍了如何使用Python的SkillMetrics库快速绘制专业泰勒图,以直观对比多个模型的预测性能。通过整合相关系数、标准差和中心化均方根误差三个核心指标,该工具能帮助数据科学家和研究者高效完成模型评估与可视化,提升分析报告质量。文章提供了从环境配置、数据准备到高级定制与子图对比的完整代码示例。

7z8x2c4v6b9的博客 371

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 659

[置顶] 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题

写道 其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是openoffice打开正常而excel打开不正常, 后来也没解决了, 只能把编码转了. 这次又遇到这个问题了, 在网上一番寻找, 在一篇java的文章里找到了原因, 是由于输出的CSV文件中没有BOM. 什么是BOM? 在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它

vb2005xu的专栏 292

深入解析 OpenClaw(小龙虾)源码:架构设计与核心实现

OpenClaw用清晰、工程化的代码结构,将复杂的Agent交互流程变成了可管理、可扩展的流水线。无论是想深入了解Agent系统设计,还是希望二次开发定制自己的AI助理,阅读OpenClaw源码都是一次绝佳的学习旅程。希望本文能帮助你快速掌握OpenClaw的核心脉络。如果你对某个模块(如技能开发、安全机制)感兴趣,欢迎继续探讨。本文基于OpenClaw社区版本源码分析,具体实现可能随版本迭代有所调整,请以最新源码为准。

Ven%的博客 449

原声php 读取excel乱码_[转]解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题 | 吴小强的博客...

其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是OpenOffice打开正常而excel打开不正常, 后来也没解决了, 只能把编码转了.这次又遇到这个问题了, 在网上一番寻找, 在一篇java的文章里找到了原因, 是由于输出的CSV文件中没有BOM.什么是BOM?在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS...

weixin_39593718的博客 101

Simulink开发项1000例实战专栏--实例161:基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 189

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

php 0xef 0xbb 0xbf,utf-8编码的csv文件,用excel打开乱码,解决办法,在输出前加 0xEF,0xBB,0xBF三个char...

转自 http://blog.youkuaiyun.com/zcmssd/article/details/6086649是由于输出的CSV文件中没有BOM.什么是BOM?在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH N...

weixin_32129195的博客 575

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

php csv文件打开乱码怎么办,PHP生成UTF-8编码的CSV文件打开乱码的解决方法

php生成utc-8编码的csv文件,使用excel打开查看乱码,分享下解决方法,供大家参考。openoffice打开正常而excel打开不正常, 后来只能把编码转换后,才得以解决。后来查找原因, 是由于输出的CSV文件中没有BOM.什么是BOM?在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应...

weixin_29327977的博客 234

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

php打印目录显示为乱码,PHP输出CSV文件出现乱码问题

问题:PHP输入用户列表为csv文件,用excel打开显示为乱码,用记事本或ue打开正常.查看文件编码显示为utf-8解决:function down_file($filepath,$filename){if(!file_exists($filepath)){echo "backup error ,download file no exist";exit();}ob_end_clean();hea...

weixin_42502643的博客 134

【黄啊码】PHP结合vue导出excel乱码

【黄啊码】PHP结合vue导出excel乱码

黄啊码 1545
上一篇: PHP生成linux命令行进度条(装逼神条)
下一篇: php用TCPDF导出PDF文件
springdk2009
博客等级 码龄17年 1835粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值