其实原理很简单,因为office是在windows下的,用的是ansi字符集,所以打开utf8的文件时,中文内容会变成乱码。这时需要告诉excel当前的.csv文件是utf8格式的,他就能正常识别。

解决方式是在创建文件后,在最开头写入一个 UTF8-BOM头标识,excel就知道这个文档用utf8格式打开。

代码如下,请参考输出bom头的这行。

$sCsvFile = storage_path('app/csv_vc_cb_'. time() . rand(100, 999) .'.csv'); //csv文件
$fp = fopen($sCsvFile, 'w'); //打开文件
fputs($fp, pack('CCC',0xef,0xbb,0xbf)); //输出bom头
//写行首
$aRow = ['账本id', '虚拟币名', '用户id', '手机号', '真名', '花名', '身份证' , '本期期初额', '本期期末额', '末额', '可核销额'];
fputcsv($fp, $aRow); //输出行
fclose($fp);

再提供一个类文件,可以直接处理读取bom文件时的头剥离,与识别文件的字符集是否为 utf8,直接用吧。

/*** 字符串BOM检测* @author JerryLi**/
class StringBom{/*** 移除字符串的BOM** @param  string $str 输入字符串* @return string 输出字符串*/static public function removeBOM($str)    {return self::checkBom($str)?substr($str, 3):$str;}/*** 检查是否带UTF-8的BOM头* @param string $str* @return boolean*/static public function checkBom($str){$str_3 = substr($str, 0, 3);return $str_3 == pack('CCC',0xef,0xbb,0xbf);}/*** 检查是否为UTF-8 BOM文件* @param string $sFileName 文件名* @return boolean*/static public function isBomFile($sFileName){$hf = fopen($sFileName, 'r');if (false !== $hf){$str = fgets($hf,3);fclose($str);return self::checkBom($str);}else{return false;}}/*** 检查是否为UTF-8字符集* @param string $sStr* @return boolean*/static public function isUtf8($sStr){$sFileType = mb_detect_encoding($sStr , array('UTF-8','GBK','LATIN1','BIG5'));return $sFileType === 'UTF-8';}/*** 检测文件是否为UTF-8字符集的文件* @param string $sFileName 文件名* @return boolean*/static public function isUtf8File($sFileName){$hf = fopen($sFileName, 'r');if (false !== $hf){$str = fgets($hf,3);fclose($str);return self::isUtf8($str);}else{return false;}}
}

PHP在UTF8下生成的.csv在excel中乱码问题解决相关推荐

  1. 15、解决14中csv用excel打开乱码的问题 open('zhihu.csv','w',newline='',encoding='utf-8-sig')...

    解决14中csv用excel打开乱码的问题 ,其实就是在写csv的时候把 utf-8 改成 utf-8-sig open('zhihu.csv','w',newline='',encoding='ut ...

  2. html 联想下拉菜单,excel下拉菜单联想 在Excel中制作具有联想能力的下拉列表的方法...

    excel下拉菜单联想 在Excel中制作具有联想能力的下拉列表的方法,看到标题你是不是很兴奋,这不就是你想学习的知识吗?当你掌握excel下拉菜单联想这个知识的时候你一定很兴奋,一定不会后悔看了ex ...

  3. Python生成的csv文件打开是乱码解决办法

    本文转自:https://www.cnblogs.com/onelikeone/p/7751506.html excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com ...

  4. Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件

    说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...

  5. 写csv解决Excel打开乱码问题

    写csv解决以文本和Excel打开乱码问题 public static File createCSVFile(List<?> exportData, LinkedHashMap map, ...

  6. Qt: Linux下生成.xlsx文件(excel表格文件)

    Qt开发,项目中有个功能是要将数据导出至excel文件,也就是.xlsx或.wps格式文件. 查询一番,需要用到一个库 Qt Xlsx,方法如下: 1. 下载源码: GitHub - dbzhang8 ...

  7. 微信小程序云开发csv导入数据库中文乱码问题解决

    针对这个问题自己总结了一套步骤. 一.新建Excel并编辑数据: 二.Excel 编辑好后另存为csv文件(直接导入微信小程序云开发数据库会出现中文乱码): 三.csv文件直接改后缀名为.txt,然后 ...

  8. python写入csv 用Excel打开乱码的解决方法

    主要是因为编码格式不对,不能使用encoding='utf-8',改为encoding='GB18030'即可 下面展示样例. with open('1.csv', 'w', newline='', ...

  9. java输出csv文件excel打开乱码问题

    首先明确excel只能直接打开ANSI编码的csv文件,如果csv文件是utf-8编码的,excel打开会乱码.所以大家如果出现excel打开csv文件乱码的情况,其原因基本上都是编码不是ANSI所致 ...

最新文章

  1. 使用Vue.js进行数据绑定以及父子组件传值
  2. Cygwin运行nutch报错:Failed to set permissions of path
  3. 监听Activity的生命周期的方式。
  4. 《系统集成项目管理工程师》必背100个知识点-72配置管理的主要活动
  5. android image 位移动画_深入理解Android之动画
  6. python写日志文件_Python logging日志模块 配置文件方式
  7. mysql 服务器初始面膜_安全初始化MySql服务器
  8. python-运算符之算术运算符
  9. Python入门(01) -- 列表简介
  10. easyui-textbox锁定按钮不锁定_EU5几乎锁定年度销量冠军,为何北汽新能源却高兴不起来?...
  11. Unable to execute diff program: WinDiff 【SourceOffSite】
  12. 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
  13. java计算两个时间差的方法_java计算两个时间相差天数的方法汇总
  14. 编译原理中的first集,follow集和selec集的小解
  15. apple关闭双重验证_Apple安全浏览说明-Apple为什么将您的数据发送给Google和腾讯,以及如何将其关闭
  16. 苹果ppt_熬夜看完苹果发布会,我居然学会了用PPT做霓虹灯特效?!
  17. [洛谷]P2404 自然数的拆分问题
  18. Unity中的布料系统
  19. ABAP Modify 的用法(TRANSPORTING)
  20. SSD系列算法扩展与优化

热门文章

  1. Linux下串口调试及使用shell编程接收数据
  2. 学习强国-为中华崛起而学习
  3. 求一个方阵的主对角线及次对角线的和(C语言)(二维数组)
  4. python视频压缩算法_深度学习之图像视频压缩技术
  5. js 跳转到指定位置 高德地图_JS引入高德地图定位
  6. RT_Thread_串口数据解包
  7. PDF打开口令、PDF编辑限制如何解决
  8. xsim安装手记(转)
  9. ZigBee--IAR新建、配置LED工程
  10. 蓝桥杯------蓝桥幼儿园