这篇文章主要介绍了php 生成csv mac下乱码 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

$file_name = date('Ymd', time()) . '.csv'; //设置文件名

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename='.$file_name);

header('Cache-Control: max-age=0');

$fp = fopen('php://output', 'a');

$row = [

'name' => '测试',

'email' => 111111,

'mobile' => 22222,

'weixinid' => '微信号',

];

fwrite($fp,"\xEF\xBB\xBF");

fputcsv($fp, $row);

php导出csv文件乱码问题解决方法

说 这个问题之前首先来说一下什么是CSV文件?Comma Separator Value(逗号分隔值)是也。常常用来数据转换的中间文件存在,比如:从Mysql中导出数据到CSV,导入CSV到SqlServer中。在 Linux下用PHP脚本从Mysql数据库中将表的数据按照条件导出成csv,使用utf-8编码导出CSV文件,打开后里边的中文成了乱码 (Windows下CSV文件默认与Microsoft Excel关联),用Notepad++或者Word打开正常,不过排版很乱。原因:BOM惹的祸,微软惹的祸。

什么是BOM?Byte Order Mark(比特序标记)是也。

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

Bytes Encoding Form00 00 FE FFUTF-32, big-endian

FF FE 00 00UTF-32, little-endian

FE FFUTF-16, big-endian

FF FEUTF-16, little-endian

EF BB BFUTF-8

类Unix系统中并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。

实现代码如果

注:在写csv文件时确保php源码是utf-8,并且无BOM,并且没有输出任何内容。

Excel在读取csv的时候是通过读取文件头上的bom来识别编码的,如果文件头无bom信息,则默认按照unicode编码读取。(这个bom是微软自己定义的一种文件头部协定,顾名思义存储在文件头部,存储内容就是标识文件编码的信息。)

而我们生成csv的平台不一定遵循微软的bom协议,导致如果输出非unicode编码的csv文件(例如utf-8),并且没有生成bom信息的话,Excel自动按照unicode编码读取,就会出现乱码问题了。

掌握了这点相信乱码已经无法阻挡我们前进的步伐了:只需将非unicode编码的csv文件,用文本编辑器(推荐notepad++)打开并转换为带bom的编码形式(具体编码方式随意),问题解决。

相关推荐:

mac php csv 乱码,php 生成csv mac下乱码相关推荐

  1. php用excel打开乱码,PHP生成CSV文件用Excel打开乱码问题_PHP教程

    今天有一同学问我为什么PHP生成CSV文件用Excel打开会出现乱码呢,下面小编来给大家找了一些常见的办法,希望此方法对各位朋友会有所帮助. 百度查证后得知 PHP生成UTF-8编码的CSV文件用Ex ...

  2. csv文件 java_Java生成CSV文件实例详解

    本文实例主要讲述了Java生成CSV文件的方法,具体实现步骤如下: 1.新建CSVUtils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  3. java 生成csv文件_Java生成CSV文件实例详解

    本文实例主要讲述了java生成csv文件的方法,具体实现步骤如下: 1.新建csvutils.java文件: package com.saicfc.pmpf.internal.manage.utils ...

  4. java csv下载_java 生成csv文件,弹出下载对话框。。。

    1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中.这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限).这个就不写示例了. 2.在服务器端把文件 ...

  5. linux查找乱码文件,(收集)linux环境下乱码的解决方法

    **************************** 就是从数据库中取出来时,在存入linux的文件里时,在字符流时制定编码格式.代码如下: FileOutputStream fos=new Fi ...

  6. 27. 生成CSV文件

    CSV(Comma-Separated Values)文件中文件字符分隔值,CSV文件以纯文本形式存储表格数据(数字和文本),可以被常见制表工具(excel等)直接读取 目录 1  生成CSV 2   ...

  7. python数据写入csv会丢失0字头_python csv模块生成CSV文件,0字头数字缺失,汉字乱码...

    python CSV模块 写入CSV文件时,0开头的数字会丢失 # _*_ coding:utf-8 _*_ #win7+python2.7.x import csv csvfile = file(' ...

  8. 解决utf8编码的php生成csv打开乱码的问题

    解决utf8编码的php生成csv打开乱码的问题 参考文章: (1)解决utf8编码的php生成csv打开乱码的问题 (2)https://www.cnblogs.com/Crius/p/115586 ...

  9. shell脚本生成csv文件,但是解压乱码解决方案

    问题描述:使用sqluldr2linux64.bin生成csv文件以后上传到页面展示,但是在页面上下载的时候不管是文件名还是文件内容都是中文乱码.PS:页面上传的时候默认字符集是UTF-8. 初步分析 ...

最新文章

  1. 为啥led灯用一年后暗了很多_有些人日间车灯可以关为啥偏偏不关?是要告诉别人他的车好吗?...
  2. 机器人编程语言python-个人微信接入图灵机器人(基于Python)
  3. C++大小写字母的转换
  4. css获取到指定元素的宽度,在回调返回宽度值
  5. 51nod 1307 绳子与重物 二分+dfs / 并查集
  6. php获取站点的根目录和站点的根URL
  7. CustomValidator,客户端,服务器端验证
  8. mybatis基于注解(三)
  9. 喜马拉雅音频批量下载
  10. 广东工业大学通信原理复习笔记第七章数字信号的调制传输(思维导图)含链接和习题
  11. 将png/jpg图像数据集转四维tensor输入PyTorch
  12. Adobe Creative Cloud官方卸载工具
  13. python获取浏览器network_如何使用python selenium获取浏览器网络日志
  14. 建模实训报告总结_建模实习工作总结
  15. 利用倾斜摄影技术土方工程计算
  16. 网站域名综合查询-批量免费网站域名综合查询工具
  17. 20181214-python-tips
  18. RKRK3399平台开发系列讲解(其他篇)1.29、查看显示时钟
  19. AWS免费套餐服务器部署NET CORE网站
  20. 万兴剪刀手去水印教程_万兴神剪手怎么去水印教程_赶快收藏吧

热门文章

  1. 怎么修改远程服务器的地址,怎么修改远程服务器的地址
  2. javaWeb(入门基础详解)
  3. SpringBoot的MyBatis generator 注解方式和xml方式 (四)
  4. jsx怎么往js里传参数_给js文件传参数(详解)
  5. 怎么看电脑配置高不高_辣椒产量高不高?关键看播种前的种子处理,你知道怎么做吗?...
  6. android消息队列模型,Android 消息队列机制
  7. OpenShift 4 Tekton (3) - 通过控制台的图形化方式配置Tekton Pipeline
  8. Web API——添加Swagger、SQL Server、日志记录、导出到Excel和Docker
  9. ASP.NET Core 3.0 发布
  10. 使用.NET Core 2开发部署Angular 5项目