写道
其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是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));
<?php
function writeCsvToFile($file,array $data){
$fp = fopen($file, 'w');
//Windows下使用BOM来标记文本文件的编码方式
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
foreach ($data as $line) {
fputcsv($fp, $line);
}
fclose($fp);
}
$file = "./testcsv.csv";
$data = array(
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
array(1,'色色',12345,'vb200'),
);
writeCsvToFile($file,$data);
分享到:
相关推荐
主要介绍了Java避免UTF-8的csv文件打开中文出现乱码的方法,结合实例形式分析了java操作csv文件时使用utf-16le编码与utf8编码相关操作技巧,需要的朋友可以参考下
Python 简单使用 pandas 读取excel 的 csv文件处理,支持utf-8和gbk编码自动识别。
我们在用excel打开utf-8的csv文件进行编辑保存后会变成ansi格式, 想要将它转成utf-8可以通过记事本打开另存为utf-8, 不过上述方法在文件多的时候速度就很慢了. 我想要一键转码多个utf-8的文件,因此做了这个软件. ...
全国各地车牌号码一览表-utf-8.csv
2-Gbase导入csv文件教程(csv不要用Excel打开)
ANSI --> UTF-8 Unicode --> ANSI Unicode --> UTF-8 UTF-8 --> ANSI UTF-8 --> Unicode UTF-8 --> Unicode big endian ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不...
里面有ipv4和ipv6地址,经纬度,城市,定位。GeoLite_-City_Locations-zh-CN.csv是ansi编码,可以用excel直接打开,GeoLite2-City-Locations-zh-CN.csv是utf-8编码,打开乱码。
主要介绍了Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
Vtiger-5.2.1-导出数据文件Excel及CSV中文乱码问题完美修正包
提供GB18030-2005标准的CSV格式的汉字编码表(附带对应字符的utf-8和utf-16编码)、GB18030手册和ASCII编码表。CSV文件是由Python从系统中导出(Python代码也提供在文件中,根据国家标准手册要求设计开发的),可以...
先举个例子,分别以不指定编码、指定编码为 utf-8、指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一、不指定编码方式,直接存入 csv 文件 import csv with open('test.csv', 'w...
excel打开csv文件中文乱码问题,将乱码文件拖到此工具就可完成转码,正常显示中文。
Maxmind GeoIP2-Country-CSV_20200331 朋友买的收费库 通过GeoIP获取ip所属地 完整: GeoIP2-Anonymous-IP-CSV_20200428.zip GeoIP2-Anonymous-IP_20200428.tar.gz GeoLite2-ASN-CSV_20200428.zip GeoLite2-...
1,所有字段如在中文,一定要以汉字开头,否则不能转为utf-8编码。 2,如转换后出现乱码,请将excel表格中的内容加上边框表格。 vcf转csv转excel步骤: 导出手机vcf文件 - VCF2CSV读取vcf转为csv表格 - 打开excel\...
大家一般都会知道到生成的csv文件,中文或其他的语言会出现乱码的问题,这是因为csv它不支持utf-8的原因,在我上传的这个文件中已经很好的解决了它的乱码的问题,如果不会使用可以给我留言
本文实例讲述了PHP读取文件,解决中文乱码UTF-8的方法。分享给大家供大家参考,具体如下: $opts = array( 'file' => array( 'encoding' => "utf-8" ) ); $opts = array('http' => array('encoding' => 'utf-8'))...
多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...
unemployment-rate-1948-2010.csv
IMDB-Movie-Data,pandas处理缺失值文件