Import csv - encodage défaillant
Résolu/Fermé
jerryone3
Messages postés
55
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
19 juin 2014
-
5 janv. 2011 à 17:34
jerryone3 Messages postés 55 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 19 juin 2014 - 6 janv. 2011 à 17:50
jerryone3 Messages postés 55 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 19 juin 2014 - 6 janv. 2011 à 17:50
A voir également:
- Import csv - encodage défaillant
- Encodage ascii - Guide
- Changer encodage excel - Forum Excel
- Held by import customs dhgate ✓ - Forum Consommation & Internet
- Comment savoir quel composant de mon ordinateur est défaillant - Guide
- Excel ouvrir csv sans convertir - Forum Excel
4 réponses
UgglyBoy
Messages postés
422
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
30 mai 2015
64
6 janv. 2011 à 00:02
6 janv. 2011 à 00:02
enregistre ton script (le fichier lui-même) en utf-8
jerryone3
Messages postés
55
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
19 juin 2014
1
6 janv. 2011 à 12:12
6 janv. 2011 à 12:12
utf8_decode sur le fgets, j'ai testé, ça aide pas.
UgglyBoy
Messages postés
422
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
30 mai 2015
64
Modifié par UgglyBoy le 6/01/2011 à 15:10
Modifié par UgglyBoy le 6/01/2011 à 15:10
tu n'as pas compris ce que je disais.
alors procède différemment:
remplace:
par:
alors procède différemment:
remplace:
if($premier_champ =="Campaign") echo "ici";
par:
if(utf8_encode($premier_champ) =="Campaign") echo "ici";
jerryone3
Messages postés
55
Date d'inscription
dimanche 21 décembre 2008
Statut
Membre
Dernière intervention
19 juin 2014
1
6 janv. 2011 à 17:50
6 janv. 2011 à 17:50
J'ai très bien compris ce que tu disais, et je l'avais fait. C'était pas ça, mais merci quand même pour ton aide. En attendant...
Trouvé ! Je donne la solution, au cas où quelqu'un ait le même problème, ça lui permettra de conserver les cheveux que je n'ai plus :
Il y a un élément qui s'appelle le BOM :
<lien type="wikipedia" url="Marque_d'ordre_des_octets">http://fr.wikipedia.org/wiki/Marque_d%27ordre_des_octets</lien>
Celui-ci était inclus dans mon fichier, et c'est son marquage qu'on voit au début du premier champ, les deux caractères étranges. Il existe plusieurs marquages possibles, en fonction du format du fichier, qu'une fonction trouvée sur php.net vous permet de trouver facilement :
<code type="php">
<?php
// Unicode BOM is U+FEFF, but after encoded, it will look like this.
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));
define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
function detect_utf_encoding($filename) {
$text = file_get_contents($filename);
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
if ($first3 == UTF8_BOM) return 'UTF-8';
elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';
elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';
elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';
elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';
}
?>
</code>
La solution : trouver avec quel encodage ça fonctionne bien, et utiliser mb_convert_encoding. On peut le faire facilement grâce à ceci :
<code type="php">
foreach(mb_list_encodings() as $chr){
echo mb_convert_encoding($text, 'UTF-8', $chr)." : ".$chr."<br>";
}
</code>
Voila voila !
Trouvé ! Je donne la solution, au cas où quelqu'un ait le même problème, ça lui permettra de conserver les cheveux que je n'ai plus :
Il y a un élément qui s'appelle le BOM :
<lien type="wikipedia" url="Marque_d'ordre_des_octets">http://fr.wikipedia.org/wiki/Marque_d%27ordre_des_octets</lien>
Celui-ci était inclus dans mon fichier, et c'est son marquage qu'on voit au début du premier champ, les deux caractères étranges. Il existe plusieurs marquages possibles, en fonction du format du fichier, qu'une fonction trouvée sur php.net vous permet de trouver facilement :
<code type="php">
<?php
// Unicode BOM is U+FEFF, but after encoded, it will look like this.
define ('UTF32_BIG_ENDIAN_BOM' , chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF));
define ('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00));
define ('UTF16_BIG_ENDIAN_BOM' , chr(0xFE) . chr(0xFF));
define ('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF) . chr(0xFE));
define ('UTF8_BOM' , chr(0xEF) . chr(0xBB) . chr(0xBF));
function detect_utf_encoding($filename) {
$text = file_get_contents($filename);
$first2 = substr($text, 0, 2);
$first3 = substr($text, 0, 3);
$first4 = substr($text, 0, 3);
if ($first3 == UTF8_BOM) return 'UTF-8';
elseif ($first4 == UTF32_BIG_ENDIAN_BOM) return 'UTF-32BE';
elseif ($first4 == UTF32_LITTLE_ENDIAN_BOM) return 'UTF-32LE';
elseif ($first2 == UTF16_BIG_ENDIAN_BOM) return 'UTF-16BE';
elseif ($first2 == UTF16_LITTLE_ENDIAN_BOM) return 'UTF-16LE';
}
?>
</code>
La solution : trouver avec quel encodage ça fonctionne bien, et utiliser mb_convert_encoding. On peut le faire facilement grâce à ceci :
<code type="php">
foreach(mb_list_encodings() as $chr){
echo mb_convert_encoding($text, 'UTF-8', $chr)." : ".$chr."<br>";
}
</code>
Voila voila !