Microsoft excel 打开utf-8编码csv乱码问题

<?php
/*
其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是openoffice打开正常而excel打开不正常, 后来也没解决了, 只能把编码转了.

这次又遇到这个问题了, 在网上一番寻找, 在一篇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));
*/

$arr = array(
    ‘abcdefasdg\‘sdf\‘l""""""‘,
    ‘lkjsdfljk;df\‘‘,
    "‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘‘",
    ‘我就是我啊,哈哈啊boy i咯veyou上级领导发射点fl‘
);

$handle = fopen(‘demo.csv‘,‘w‘);
fwrite($handle,chr(0xEF).chr(0xBB).chr(0xBF));//解决excel2010乱码问题
fputcsv($handle,$arr);
fclose($handle);

  

Microsoft excel 打开utf-8编码csv乱码问题

时间: 2024-10-11 13:24:55

Microsoft excel 打开utf-8编码csv乱码问题的相关文章

Excel打开无BOM-UTF8文件中文乱码

运营同学需求扫库统计全服大V玩家,在数据库上扫出结果发过去之后,反馈说使用Excel打开玩家姓名都是乱码.看了下发过去的文件,发现都是linux下不带BOM的UTF8编码文件,而Excel作为Windows下的软件,需要使用BOM头来确定文件为UTF8编码,所以需要给文件加上BOM头. 一般的需求都是去掉BOM头,这次需求居然是加上BOM头,比较奇怪,不过试了下,发现用Python完成转换还是非常方便的,读出来直接decode/encode即可,代码如下: 1 #coding=utf8 2 #将

PL/SQL Developer 导出csv文件,用excel打开中文显示乱码

今天打算用PL/SQL Developer的导出csv功能把sql语句的查询结果导出到一个csv文件.这个sql查询的结果里面有中文,最后用execel打开的时候发现中文全部是乱码. 百度之后得到答案.下面的方法在excel2007下面验证成功 方法 1 导出csv格式文件 新建excel文件 比如 a.xls excel软件打开 选择菜单数据 -导入外部数据  unicode默认下一步 选择 逗号分隔符 点击确定导入完成 方法 2 导出成html格式  使用ie打开 在ie上点击右键 导出到

phpexcel导出文件后,wps能用 excel打开乱码解决

导出excel后wps能用 excel打开乱码,是因为导出的类使用方式问题 把$objWriter = new \PHPExcel_Writer_Excel2007($this->_obj); 换成$objWriter = \PHPExcel_IOFactory::createWriter($this->_obj, 'Excel5');  就能解决问题 public function output($file_name){ //直接输出到浏览器 header("Pragma: pub

hive表数据导出到csv乱码原因及解决方案

转载自http://blog.csdn.net/lgdlxc/article/details/42126225 Hive表中的数据使用hive - e"select * from table">aa.csv导出到csv文件的时候在window中用Excel打开查看的时候是乱码,而且格式也不对. 原因有下面两个: 1.乱码的原因是用excel打开csv时格式默认为gbk,但是从hive中导出来的是utf8的 2.格式不对的原因是csv文件的列分隔符是逗号或者\t,而hive中默认使

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

解决Excel打开UTF-8编码的CSV文件乱码的问题 引用自:https://en.wikipedia.org/wiki/Comma-separated_values " CSV formats are not limited to a particular character set. They work just as well with Unicode character sets (such as UTF-8 or UTF-16) as with ASCII (although par

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG

解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-6 方法一: 出处:http://blog.csdn.net/leonzhouwei/article/details/8447643 直接用 Excel 打开 UTF-8 编码的 CSV 文件会导致汉字部分出现乱码. 原因是 Excel 以 ANSI 格式打开,不会做编码识别. 打开 UTF-8 编

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

前段时间用某软件导出了一个CSV文件,需要在Excel中处理并打印,但是我直接用Excel打开这个CSV文件却发现,文件中的所有中文字符都变成了乱码,经过自己的尝试,采用数据导入的方法解决了问题,后来又搜了一下,发现还有其他方法,数据导入只是其中一种而已.现在整理总结一下: 方法1.数据导入 打开 Excel,执行"数据"->"自文本",选择 CSV 文件,出现文本导入向导,选择"分隔符号",下一步,勾选"逗号",去掉&

JAVA之编码---- CSV在文本下是正常的,用EXCEL打开是乱码的问题

JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正常的,同时显示也是UTF-8的编码,经过测试发现如下结果: 1.EXCEL只能打开ANSI的编码,而ANSI需要当前操作系统是什么编码,就用什么编码.如中文系统下,则只能认识GBK的编码,不可能认识UTF-8的编码,因此网上说的增加16进制下的EF BB BF,根本不是解决之道2.我们知道了EXCEL只能

excel打开csv 出现乱码怎么解决(转载百度经验)

http://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html CSV是逗号分隔值的英文缩写,通常都是纯文本文件.CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符.通常CSV文件可以用EXCEL正常打开,但是许多人都有这样的经历,使用EXCEL打开后,原本应该出现中文地方都变成乱码了.这种情况怎么解决呢?如下图: 出现这种情况怎么解决呢?我们首先来分析一下此种情况的内在原因.在简体中文环境下,EXCEL打开的C