search
HomeBackend DevelopmentPHP Tutorial 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的有关问题

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

写道
其实这个问题很久之前遇到过, 应该是没解决, 当时的情况是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);
?
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
vb属于哪种编程语言vb属于哪种编程语言Jul 05, 2023 pm 02:14 PM

vb属于高级编程语言,是一种通用的基于对象的编程语言,是一种为结构化的、模块化的、面向对象的、包含协助开发环境的事件驱动为机制的可视化程序设计语言,采用了直观的图形用户界面设计,可以通过拖放控件、设置属性和编写事件处理程序来开发应用程序,这种可视化编程的方式,使得开发者可以直观地进行界面设计和编程,无需太多的编码经验。

使用C#中的Array.Sort函数对数组进行排序使用C#中的Array.Sort函数对数组进行排序Nov 18, 2023 am 10:37 AM

标题:C#中使用Array.Sort函数对数组进行排序的示例正文:在C#中,数组是一种常用的数据结构,经常需要对数组进行排序操作。C#提供了Array类,其中有Sort方法可以方便地对数组进行排序。本文将演示如何使用C#中的Array.Sort函数对数组进行排序,并提供具体的代码示例。首先,我们需要了解一下Array.Sort函数的基本用法。Array.So

简单明了的PHP array_merge_recursive()函数使用方法简单明了的PHP array_merge_recursive()函数使用方法Jun 27, 2023 pm 01:48 PM

在进行PHP编程时,我们常常需要对数组进行合并。PHP提供了array_merge()函数来完成数组合并的工作,不过当数组中存在相同的键时,该函数会覆盖原有的值。为了解决这个问题,PHP在语言中还提供了一个array_merge_recursive()函数,该函数可以合并数组并保留相同键的值,使得程序的设计变得更加灵活。array_merge

dom和bom对象有哪些dom和bom对象有哪些Nov 13, 2023 am 10:52 AM

dom和bom对象有:1、“document”、“element”、“Node”、“Event”和“Window”等5种DOM对象;2、“window”、“navigator”、“location”、“history”和“screen”等5种BOM对象。

如何使用PHP中的array_combine函数将两个数组拼成关联数组如何使用PHP中的array_combine函数将两个数组拼成关联数组Jun 26, 2023 pm 01:41 PM

在PHP中,有许多强大的数组函数可以使数组的操作更加方便和快捷。当我们需要将两个数组拼成一个关联数组时,可以使用PHP的array_combine函数来实现这一操作。这个函数实际上是用来将一个数组的键作为另一个数组的值,合并成一个新的关联数组。接下来,我们将会讲解如何使用PHP中的array_combine函数将两个数组拼成关联数组。了解array_comb

vb中int是什么意思vb中int是什么意思Dec 03, 2020 am 09:48 AM

vb中int是指取整数的函数,其语法如“int(x)”,表示取不大于x的最大整数;和int函数功能类似的函数还有Fix函数,该函数会删除小数部分而返回剩下的整数。

bom和dom有什么区别bom和dom有什么区别Nov 13, 2023 pm 03:23 PM

bom和dom在作用和功能、与JavaScript的关系、相互依赖性、不同浏览器的兼容性和安全性考虑等方面都有区别。详细介绍:1、作用和功能,BOM的主要作用是操作浏览器窗口,它提供了浏览器窗口的直接访问和控制,而DOM的主要作用则是将网页文档转换为一个对象树,允许开发者通过这个对象树来获取和修改网页的元素和内容;2、与JavaScript的关系等等。

vb连接数据库的操作有什么vb连接数据库的操作有什么Aug 31, 2023 am 10:52 AM

在VB中,连接数据库的操作通常涉及以下几个方面:1、引入数据库连接库;2、创建数据库连接对象;3、配置连接字符串;4、打开数据库连接;5、执行数据库操作;6、处理查询结果;7、关闭数据库连接。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Repo: How To Revive Teammates
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor