PHP在UTF8下生成的.csv在excel中乱码问题解决
其实原理很简单,因为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中乱码问题解决相关推荐
- 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 ...
- html 联想下拉菜单,excel下拉菜单联想 在Excel中制作具有联想能力的下拉列表的方法...
excel下拉菜单联想 在Excel中制作具有联想能力的下拉列表的方法,看到标题你是不是很兴奋,这不就是你想学习的知识吗?当你掌握excel下拉菜单联想这个知识的时候你一定很兴奋,一定不会后悔看了ex ...
- Python生成的csv文件打开是乱码解决办法
本文转自:https://www.cnblogs.com/onelikeone/p/7751506.html excel打开csv 出现乱码怎么解决 https://jingyan.baidu.com ...
- Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件
说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...
- 写csv解决Excel打开乱码问题
写csv解决以文本和Excel打开乱码问题 public static File createCSVFile(List<?> exportData, LinkedHashMap map, ...
- Qt: Linux下生成.xlsx文件(excel表格文件)
Qt开发,项目中有个功能是要将数据导出至excel文件,也就是.xlsx或.wps格式文件. 查询一番,需要用到一个库 Qt Xlsx,方法如下: 1. 下载源码: GitHub - dbzhang8 ...
- 微信小程序云开发csv导入数据库中文乱码问题解决
针对这个问题自己总结了一套步骤. 一.新建Excel并编辑数据: 二.Excel 编辑好后另存为csv文件(直接导入微信小程序云开发数据库会出现中文乱码): 三.csv文件直接改后缀名为.txt,然后 ...
- python写入csv 用Excel打开乱码的解决方法
主要是因为编码格式不对,不能使用encoding='utf-8',改为encoding='GB18030'即可 下面展示样例. with open('1.csv', 'w', newline='', ...
- java输出csv文件excel打开乱码问题
首先明确excel只能直接打开ANSI编码的csv文件,如果csv文件是utf-8编码的,excel打开会乱码.所以大家如果出现excel打开csv文件乱码的情况,其原因基本上都是编码不是ANSI所致 ...
最新文章
- 使用Vue.js进行数据绑定以及父子组件传值
- Cygwin运行nutch报错:Failed to set permissions of path
- 监听Activity的生命周期的方式。
- 《系统集成项目管理工程师》必背100个知识点-72配置管理的主要活动
- android image 位移动画_深入理解Android之动画
- python写日志文件_Python logging日志模块 配置文件方式
- mysql 服务器初始面膜_安全初始化MySql服务器
- python-运算符之算术运算符
- Python入门(01) -- 列表简介
- easyui-textbox锁定按钮不锁定_EU5几乎锁定年度销量冠军,为何北汽新能源却高兴不起来?...
- Unable to execute diff program: WinDiff 【SourceOffSite】
- 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
- java计算两个时间差的方法_java计算两个时间相差天数的方法汇总
- 编译原理中的first集,follow集和selec集的小解
- apple关闭双重验证_Apple安全浏览说明-Apple为什么将您的数据发送给Google和腾讯,以及如何将其关闭
- 苹果ppt_熬夜看完苹果发布会,我居然学会了用PPT做霓虹灯特效?!
- [洛谷]P2404 自然数的拆分问题
- Unity中的布料系统
- ABAP Modify 的用法(TRANSPORTING)
- SSD系列算法扩展与优化