Page 1 sur 1

Convertir Fichiers utf-8 en utf-16LE

Posté : 13 févr. 2017, 17:30
par JohnDoe31
Bonjour A tous,

Actuellement, je crée des fichiers encodé en utf8 via PHP puis exécute un script PowerShell pour les convertir en UTF-16LE.
J'aimerais automatiser l'encodage via PHP.

Quel est le script pour encoder des lots de fichier de UTF-8 en UTF-16LE avec PHP ?

Je vous remercie
Cordialement

Re: Convertir Fichiers utf-8 en utf-16LE

Posté : 13 févr. 2017, 17:50
par @rthur
Bonjour,

Il n'existe pas de script tout fait mais tu peux le faire toi-même avec les fonctions :
- glob() pour lister tous les fichiers d'un répertoire : http://php.net/glob
- foreach() pour parcourir cette liste fichier par fichier : http://php.net/foreach
- file_get_contents() pour récupérer le contenu du fichier : http://php.net/file_get_contents
- file_put_contents() pour écrire le résultat converti dans un nouveau fichier (ou dans le même) : http://php.net/file_put_contents

Pour la conversion d'encodage, PHP dispose de 2 fonctions iconv() ou mb_convert_encoding() qui font à ma connaissance la même chose :
iconv("UTF-8", "UTF-16LE", $contenu);
// ou
mb_convert_encoding($contenu,'UTF-16LE','UTF-8');
Attention l'ordre des paramètres n'est pas le même.

http://php.net/iconv
http://php.net/mb_convert_encoding

Re: Convertir Fichiers utf-8 en utf-16LE

Posté : 13 févr. 2017, 18:10
par JohnDoe31
je te remercie pour ta réponse. je viens de tester mais cela ne fonctionné pas car il me trouvé aucun encodage du fichier.

Mais en fouillant le net et ta fonction "mb_convert_encoding", j'ai testé ceci:
$contenu=chr(255).chr(254).mb_convert_encoding( $contenu, 'UTF-16LE', 'UTF-8');
source: http://ctd-web.fr/blog/2010/05/14/php-c ... -utf-16le/

Le fichier est bien encodé en UTF-16LE.

Je n'ai pas d'explication du pourquoi il faut rajouté 2 caractères.

Merci :P

Re: [RESOLU] Convertir Fichiers utf-8 en utf-16LE

Posté : 14 févr. 2017, 10:26
par @rthur
Ces 2 caractères correspondent au BOM :
https://fr.wikipedia.org/wiki/Indicateu ... des_octets.

Sans le BOM ton fichier était aussi correctement encodé mais le logiciel que tu utilises pour vérifier l'encodage t'indiquait quelque chose de faux vu que le BOM est facultatif