Cygwin ou GnuWin32 fournissent des outils Unix tels que iconvet dos2unix(et unix2dos). Sous Unix / Linux / Cygwin, vous voudrez utiliser "windows-1252" comme codage au lieu de ANSI (voir ci-dessous). (À moins que vous ne sachiez que votre système utilise une page de codes autre que 1252 comme page de codes par défaut, auquel cas vous devrez indiquer à iconv la page de codes appropriée pour la traduction.)
Convertir de l'un ( -f) à l'autre ( -t) avec:
$ iconv -f windows-1252 -t utf-8 infile > outfile
Ou sous une forme de tout-trouver-conquérir:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;
Alternativement:
## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;
Cette question a été posée à plusieurs reprises sur ce site. Voici donc quelques informations supplémentaires sur "ANSI". Dans une réponse à une question connexe, CesarB mentionne :
Il existe plusieurs codages appelés "ANSI" dans Windows. En fait,
ANSI est un terme impropre . iconv n'a aucun moyen de deviner ce que vous voulez.
Le codage ANSI est le codage utilisé par les fonctions "A" de l'API Windows (les fonctions "W" utilisent UTF-16). Le codage auquel il correspond dépend généralement de la langue de votre système Windows. Le plus courant est le CP 1252 (également appelé Windows-1252). Ainsi, lorsque votre éditeur dit ANSI, cela signifie "quelles que soient les fonctions de l'API utilisées comme codage ANSI par défaut", qui est le codage non Unicode par défaut utilisé dans votre système (et donc généralement celui utilisé pour les fichiers texte).
La page à laquelle il renvoie renvoie à cette information historique (tirée d' un fichier Microsoft PDF ) sur les origines du CP 1252 et de l'ISO-8859-1, un autre encodage souvent utilisé:
[...] Cela vient du fait que la page de code Windows 1252 était à l'origine basée sur un brouillon ANSI, qui est devenue la norme ISO 8859-1. Toutefois, lors de l'ajout de points de code à la plage réservée aux codes de contrôle dans la norme ISO, la page de codes Windows 1252 et les pages de codes Windows suivantes, basées à l'origine sur la série ISO 8859-x, s'écartaient de l'ISO. À ce jour, il n'est pas rare que la communauté de développement, à l'intérieur et à l'extérieur de Microsoft, confonde la page de codes 8859-1 avec Windows 1252, ainsi que la mention "ANSI" ou "A" utilisée pour indiquer le support des pages de codes Windows. .
N'utilisez pas le même nom de fichier en entrée et en sortie! iconvsemble tronquer les fichiers à 32 768 octets s’ils dépassent cette taille. Comme il écrit dans le fichier qu'il tente de lire, il parvient à faire le travail si le fichier est suffisamment petit, sinon il tronque le fichier sans avertissement ...
Niavlys
1
FYI Cette question est étiquetée avec osx et il ne semble pas que l'une des commandes convert-all fonctionne sur Yosemite ou El Cap. La version iconv Apple livrée ne prend pas en charge --verbose ou -o, et l’autre syntaxe de redirection de syntaxe stdout ne fonctionne pas pour une raison quelconque et l’envoie simplement à stdout standard.
Scott McIntyre
28
avec Powershell, vous pouvez faire quelque chose comme ceci:
La conversion d'ANSI en UTF via votre première proposition efface tout le contenu de mon fichier texte ...
Acroneos
@Acroneos: vous avez alors commis une erreur: le fichier dans le fichier est IN.txt, le fichier de sortie est OUT.txt ... de cette façon, il est impossible d'écraser l'original. Si vous avez utilisé le même nom de fichier pour IN.txt et OUT.txt, vous écrasez évidemment le fichier que vous lisez.
Akira
Powershell sera converti au format UTF avec nomenclature. find et iconv pourraient être beaucoup plus faciles.
UTFCast est un convertisseur Unicode pour Windows qui prend en charge le mode de traitement par lots. J'utilise la version payante et je suis assez à l'aise avec cela.
UTFCast est un convertisseur Unicode qui vous permet de convertir par lots tous les fichiers texte en codages UTF d’un simple clic de souris. Vous pouvez l'utiliser pour convertir un répertoire contenant des fichiers texte en codages UTF, y compris UTF-8, UTF-16 et UTF-32, en un répertoire de sortie, tout en conservant la structure de répertoires des fichiers d'origine. Même si votre fichier texte a une extension différente, UTFCast peut automatiquement détecter les fichiers texte et les convertir.
Oh, la version express (gratuite) est inutile - elle ne fait que "détecter" utf-8 WITH BOM !! (tout le monde peut le faire que ). Seule la version Pro qui se renouvelle automatiquement tous les 3 mois à 20 USD, sera détectée automatiquement. Le prix est raide pour un utilisateur non-entreprise. ET Faites attention si vous essayez la version de base et que votre fichier est déjà utf-8 (sans nomenclature), alors ce convertisseur le détectera en tant qu'ASCII, puis (re -) le "convertira" en utf-8, ce qui pourrait entraîner un charabia. . Soyez conscient si cela avant d'essayer la version express! Ils ont une version de démonstration pour le pro qui ne produit aucune sortie - inutile à mon humble avis parce que je ne peux pas vérifier les résultats avant d’acheter!
SherylHohman le
3
Oneliner using find, avec détection automatique
Le codage des caractères de tous les fichiers texte correspondants est détecté automatiquement et tous les fichiers texte correspondants sont convertis en utf-8codage:
Pour effectuer ces étapes, une coque sous shest utilisé avec -exec, l' exécution d' une seule ligne avec le -cdrapeau, et en passant le nom de fichier de l'argument de position "$1"avec -- {}. Entre les deux, le utf-8fichier de sortie est nommé temporairement converted.
Cette findcommande est très utile pour une telle automatisation de la gestion de fichiers.
Dans mon cas d'utilisation, j'avais besoin de la détection automatique du codage d'entrée et il y avait beaucoup de fichiers avec Windows-1250codage, pour lesquels la commande est file -bi <FILE>retournée charset=unknown-8bit. Ce paramètre n'est pas valide pour iconv.
Réponses:
Cygwin ou GnuWin32 fournissent des outils Unix tels que
iconv
etdos2unix
(etunix2dos
). Sous Unix / Linux / Cygwin, vous voudrez utiliser "windows-1252" comme codage au lieu de ANSI (voir ci-dessous). (À moins que vous ne sachiez que votre système utilise une page de codes autre que 1252 comme page de codes par défaut, auquel cas vous devrez indiquer à iconv la page de codes appropriée pour la traduction.)Convertir de l'un (
-f
) à l'autre (-t
) avec:Ou sous une forme de tout-trouver-conquérir:
Alternativement:
Cette question a été posée à plusieurs reprises sur ce site. Voici donc quelques informations supplémentaires sur "ANSI". Dans une réponse à une question connexe, CesarB mentionne :
La page à laquelle il renvoie renvoie à cette information historique (tirée d' un fichier Microsoft PDF ) sur les origines du CP 1252 et de l'ISO-8859-1, un autre encodage souvent utilisé:
la source
iconv
semble tronquer les fichiers à 32 768 octets s’ils dépassent cette taille. Comme il écrit dans le fichier qu'il tente de lire, il parvient à faire le travail si le fichier est suffisamment petit, sinon il tronque le fichier sans avertissement ...avec Powershell, vous pouvez faire quelque chose comme ceci:
tandis que ENC est quelque chose comme unicode, ascii, utf8, utf32. checkout 'aide out-file'.
pour convertir tous les fichiers * .txt d'un répertoire en utf8, procédez comme suit:
qui crée une version convertie de chaque fichier .txt dans DIR2.
EDIT: Pour remplacer les fichiers dans tous les sous-répertoires, utilisez:
la source
La page Wikipedia sur les nouvelles lignes comporte une section sur les utilitaires de conversion .
Cela semble être votre meilleur choix pour une conversion utilisant uniquement les outils livrés avec Windows:
la source
UTFCast est un convertisseur Unicode pour Windows qui prend en charge le mode de traitement par lots. J'utilise la version payante et je suis assez à l'aise avec cela.
la source
Oneliner using find, avec détection automatique
Le codage des caractères de tous les fichiers texte correspondants est détecté automatiquement et tous les fichiers texte correspondants sont convertis en
utf-8
codage:Pour effectuer ces étapes, une coque sous
sh
est utilisé avec-exec
, l' exécution d' une seule ligne avec le-c
drapeau, et en passant le nom de fichier de l'argument de position"$1"
avec-- {}
. Entre les deux, leutf-8
fichier de sortie est nommé temporairementconverted
.Cette
find
commande est très utile pour une telle automatisation de la gestion de fichiers.Cliquez ici pour plus à
find
gogo .la source
iconv -f original_charset -t utf-8 originalfile > newfile
exécutez la commande ci-dessus dans la boucle.
la source
Utilisez ce script Python: https://github.com/goerz/convert_encoding.py Il fonctionne sur n’importe quelle plate-forme. Nécessite Python 2.7.
la source
Il y a
dos2unix
sur unix.Il y avait un autre outil similaire pour Windows ( une autre référence ici ).
Comment convertir des fichiers texte Unix et Windows? a encore quelques astuces
la source
dos2unix
est utile pour convertir les sauts de ligne , mais l'OP cherche à convertir les encodages de caractères.Vous pouvez utiliser EncodingMaster . C'est gratuit, il a une version Windows, Linux et Mac OS X et fonctionne vraiment bien.
la source
Dans mon cas d'utilisation, j'avais besoin de la détection automatique du codage d'entrée et il y avait beaucoup de fichiers avec
Windows-1250
codage, pour lesquels la commande estfile -bi <FILE>
retournéecharset=unknown-8bit
. Ce paramètre n'est pas valide pouriconv
.J'ai eu les meilleurs résultats avec Enca .
Convertir tous les fichiers avec l'extension txt en utf-8
la source