Création de fichiers en UTF-8 ?
duddy67
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais avoir confirmation sur un point au sujet
de la création de fichiers encodés en UTF8 avec fopen
et fwrite.
Je sais que le sujet a été mainte fois évoqué mais c'est
tellement embrouillé et complexe qu'un petit éclaircissement
ne serait pas de trop. J'ai souvent lu par exemple qu'il fallait ajouter
l'option b (binary) a fopen mais apparemment ça ne fonctionne pas.
Ce que je cherche à faire c'est que mon script php puisse créé des fichiers txt encodés en UTF8. J'ai donc fais le test suivant:
Code :
<?php
$file = 'fichier.txt';
$str = 'éàè';
$f = fopen($file, 'w');
fwrite($f, $str);
fclose($f);
?>
J'ai tout d'abord encodé le fichier contenant ce script en latin-1 (iso-8859, je
travail avec Vim).
Après avoir lancé le script, le fichier créé (fichier.txt) pèse 3 octets.
C'est donc qu'il est encodé en iso-8859.
Puis j'ai encodé le fichier contenant le script en UTF8, et là le fichier
créé pèse maintenant 6 octets. Il est donc encodé en UTF8.
D'où ma conclusion qui est que l'encodage d'un fichier lors de sa création
avec fopen ou fwrite dépends de l'encodage du fichier contenant le script, et
pas d'une option de fopen.
Est ce que j'ai bon ?
Merci pour vos éclaircissements.
J'aimerais avoir confirmation sur un point au sujet
de la création de fichiers encodés en UTF8 avec fopen
et fwrite.
Je sais que le sujet a été mainte fois évoqué mais c'est
tellement embrouillé et complexe qu'un petit éclaircissement
ne serait pas de trop. J'ai souvent lu par exemple qu'il fallait ajouter
l'option b (binary) a fopen mais apparemment ça ne fonctionne pas.
Ce que je cherche à faire c'est que mon script php puisse créé des fichiers txt encodés en UTF8. J'ai donc fais le test suivant:
Code :
<?php
$file = 'fichier.txt';
$str = 'éàè';
$f = fopen($file, 'w');
fwrite($f, $str);
fclose($f);
?>
J'ai tout d'abord encodé le fichier contenant ce script en latin-1 (iso-8859, je
travail avec Vim).
Après avoir lancé le script, le fichier créé (fichier.txt) pèse 3 octets.
C'est donc qu'il est encodé en iso-8859.
Puis j'ai encodé le fichier contenant le script en UTF8, et là le fichier
créé pèse maintenant 6 octets. Il est donc encodé en UTF8.
D'où ma conclusion qui est que l'encodage d'un fichier lors de sa création
avec fopen ou fwrite dépends de l'encodage du fichier contenant le script, et
pas d'une option de fopen.
Est ce que j'ai bon ?
Merci pour vos éclaircissements.
A voir également:
- Création de fichiers en UTF-8 ?
- Clé windows 8 - Guide
- Creation de site web - Guide
- Renommer des fichiers en masse - Guide
- Mixcraft 8 - Télécharger - Création musicale
- Creation de compte google - Guide
1 réponse
Salut.
Je ne connais pas PHP, mais je pense que ça dépend aussi dont fonctionne fwrite.
ça dépend aussi de la manière dont PHP gère les variables et plus particulièrement les chaines de caractère.
Ce que j'essayerai de faire pour être un peu plus sur, c'est d'ouvrir ton script avec un éditeur hexadécimal et de modifier les valeurs des codes de "é", "à" ou "è" et de voir le résultat.
Ou sinon, de demander une variable à l'utilisateur et voir comment c'est écrit.
La fonction fwrite, avant d'écrire sur le disque doit connaitre la taille de la variable. En C, les chaines de caractère prennent comme standards d'avoir un octet nul à la fin. Si c'est pareil en PHP, je voi bien le code ignorer complétement ce qui est avant cet octet nul et le recopier dans le fichier.
Je ne connais pas PHP, mais je pense que ça dépend aussi dont fonctionne fwrite.
ça dépend aussi de la manière dont PHP gère les variables et plus particulièrement les chaines de caractère.
Ce que j'essayerai de faire pour être un peu plus sur, c'est d'ouvrir ton script avec un éditeur hexadécimal et de modifier les valeurs des codes de "é", "à" ou "è" et de voir le résultat.
Ou sinon, de demander une variable à l'utilisateur et voir comment c'est écrit.
La fonction fwrite, avant d'écrire sur le disque doit connaitre la taille de la variable. En C, les chaines de caractère prennent comme standards d'avoir un octet nul à la fin. Si c'est pareil en PHP, je voi bien le code ignorer complétement ce qui est avant cet octet nul et le recopier dans le fichier.