Script PHP pour conversion CP850 (DOS) en ANSI

J'ai récupéré un paquet de petit programmes encodés en CP850 (DOS) que je voulais convertir en ANSI (Windows). N'ayant pas trouvé d'utilitaires pour faire ça (sur Windows), j'ai écrit ce petit script PHP :

<?php
/**
 * Conversion fichiers encodés en CP-850 (DOS) en ANSI (Windows).
 */

/**
 * Encode un texte pour l'affichage sur la console.
 *
 * @param $str
 * @return string
 */
function encodeForConsoleOutput($str)
{
    if (
PHP_OS == 'WINNT') {
        
// L'encodage CP850 est utilisé pour les fenêtres DOS
        
$outEncoding 'CP850';
    } else {
        
// Sous Unix, on peut avoir plusieurs jeux de caractère différents
        
$locale setlocale(LC_CTYPE0);
        
$outEncoding substr($locale6);
        if (!
$outEncoding) {
            
$outEncoding 'ISO-8859-1';
        } else {
            switch(
$outEncoding) {
                case 
'euro':
                    
$outEncoding 'ISO-8859-15';
                    break;
            }
        }
    }
    
// Demande à iconv d'ignorer les caractères non supportés
    // par le jeu de caractère de sortie
    
$outEncoding .= '//IGNORE';

    return 
iconv('UTF-8'$outEncoding$str);
}

$fileInfos = new RecursiveIteratorIterator(
    new 
RecursiveDirectoryIterator(__DIR__),
    
RecursiveIteratorIterator::SELF_FIRST
);
foreach(
$fileInfos as $fileInfo) {
    
/* @var $fileInfo SplFileInfo */
    
if ($fileInfo->isDir()) continue;
    if (!
preg_match('/\.txt$/i'$fileInfo->getBasename())) continue;
    
file_put_contents(__DIR__.'/Ansi/'.$fileInfo->getBasename(),
       
iconv('CP850''Windows-1252'file_get_contents($fileInfo->getPathname())));
    echo 
encodeForConsoleOutput('Conversion '.$fileInfo->getPathname()."\n");
}
?>

Pour l'utiliser, il suffit de le placer dans le répertoire où se trouve les fichiers à traiter. Il faut adapter l'expression régulière pour filtrer les extensions (dans le code ci-dessous, seuls les fichiers portant l'extension .txt sont traités. Enfin, il faut créer le répertoire Ansi. Les fichiers convertis seront placés dans ce dernier.

Enfin, vous pouvez lancer le script avec :

php cp850-to-ansi.php

Si ça peut être utile à quelqu'un...

Etiquettes:

Add new comment