web-dev-qa-db-fra.com

Utiliser iconv pour convertir de UTF-16LE en UTF-8

Salut, j'essaie de convertir certains fichiers journaux à partir d'un serveur Microsoft SQL, mais les fichiers sont codés en utilisant UTf-16LE et iconv ne semble pas être en mesure de les convertir.

Je fais:

iconv -f UTF-16LE -t UTF-8 <filename>

J'ai également essayé de supprimer tous les retours chariot à la fin de la ligne s'il y en a, mais cela ne l'a pas corrigé non plus. Si je l'enregistre en utilisant gedit, cela fonctionne, mais ce n'est pas une solution viable car j'ai des centaines de ces fichiers.

EDIT : Veuillez voir la nouvelle réponse pour l'option manquante

42
laitha0

J'ai oublié le -o commutateur!

La commande finale est:

iconv -f UTF-16LE -t UTF-8 <filename> -o <new-filename>
33
laitha0

La commande que vous avez spécifiée sortira sur stdout. Vous pouvez soit utiliser le -o paramètre, ou redirigez votre sortie:

avec -o:

iconv -f UTF-16LE -t UTF-8 infile -o outfile

avec passepoil:

iconv -f UTF-16LE -t UTF-8 infile > outfile

Les deux donneront le résultat souhaité.

Cependant, certaines versions d'iconv (v1 sur macOS par exemple) ne prennent pas en charge le -o et vous verrez que le texte converti est répercuté sur stdout. Dans ce cas, utilisez l'option de tuyauterie.

12
A. Blesius