Maison développement back-end tutoriel php 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的有关问题

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

Jun 13, 2016 am 10:47 AM
200 array bom vb

解决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));?
<?phpfunction 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);
Copier après la connexion
?
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

À quel langage de programmation appartient vb ? À quel langage de programmation appartient vb ? Jul 05, 2023 pm 02:14 PM

À quel langage de programmation appartient vb ?

Trier le tableau à l'aide de la fonction Array.Sort en C# Trier le tableau à l'aide de la fonction Array.Sort en C# Nov 18, 2023 am 10:37 AM

Trier le tableau à l'aide de la fonction Array.Sort en C#

Méthode simple et claire pour utiliser la fonction PHP array_merge_recursive() Méthode simple et claire pour utiliser la fonction PHP array_merge_recursive() Jun 27, 2023 pm 01:48 PM

Méthode simple et claire pour utiliser la fonction PHP array_merge_recursive()

Comment utiliser la fonction array_combine en PHP pour combiner deux tableaux en un tableau associatif Comment utiliser la fonction array_combine en PHP pour combiner deux tableaux en un tableau associatif Jun 26, 2023 pm 01:41 PM

Comment utiliser la fonction array_combine en PHP pour combiner deux tableaux en un tableau associatif

Que signifie int en vb Que signifie int en vb Dec 03, 2020 am 09:48 AM

Que signifie int en vb

Que sont les objets dom et bom ? Que sont les objets dom et bom ? Nov 13, 2023 am 10:52 AM

Que sont les objets dom et bom ?

Quelle est la différence entre bom et dom Quelle est la différence entre bom et dom Nov 13, 2023 pm 03:23 PM

Quelle est la différence entre bom et dom

Quelles sont les opérations de connexion à la base de données en utilisant vb ? Quelles sont les opérations de connexion à la base de données en utilisant vb ? Aug 31, 2023 am 10:52 AM

Quelles sont les opérations de connexion à la base de données en utilisant vb ?

See all articles