web-dev-qa-db-fra.com

Convertir le type de fichier en UTF-8 sur UNIX - iconv est en échec

DUPLICATES POSSIBLES:
[.____] Fichiers de convertir par lots pour le codage ou la fin de la ligne sous Windows
[.____] Comment puis-je convertir plusieurs fichiers en codage UTF-8 à l'aide d'outils de ligne de commande * Nix?

J'ai un fichier PHP sur ma machine Windows qui, lorsqu'il se déplace vers * Nix avec WINSCP, ne montrent pas correctement les caractères.

J'ai fait glisser le fichier de la machine Linux vers le bas vers Windows et j'ai vérifié le codage avec Notepad ++, et il le dit ANSI.

J'ai donc essayé iconv -f ANSI -T UTF-8 Filename.php> FileName.php, mais faites une erreur que la conversion ANSI n'est pas prise en charge. J'ai aussi essayé Ms_ansi et je n'ai aucune erreur, mais je n'obtiens pas non plus le fichier montrant le codage approprié.

J'ouvre le fichier avec WINSCP pour voir comment il a l'air et de nombreux caractères spéciaux apparaissent comme "?". Voyant que le but du script est de supprimer ces caractères spéciaux de mes données, cela provoque vraiment un problème.

Y a-t-il un autre outil pour changer le codage? J'ai essayé Yum iconv, mais obtenez une réponse sans paquet disponible.

Comment convertiriez-vous ce fichier au codage approprié?

6
pedalpete

J'ai des problèmes similaires avec les hayes MD5 créés sur WindowsXP (sous Cygwin), enregistré dans un fichier, puis copié sur un système Linux où les hachages sont calculés pour la vérification de la copie. Si le nom d'un fichier Hashed contient des caractères non-ASCII, MD5SUM rapporte le fichier manquant, car il ne décodé pas correctement le nom du fichier. Toutefois, si j'ouvre le texte de texte contenant les hachages dans le bloc-notes et modifiez le codage de ANSI en UTF-8, le MD5SUM Linux obtiendra le codage correct.

ANSI Ce n'est pas vraiment un codage approprié (à quiconque mais Microsoft), c'est pourquoi iconv ne le ramasse pas. Vous pourriez vous échapper Windows-1252 au lieu de cela, mais il n'y a aucune garantie qu'il fonctionnera toujours:

iconv -f windows-1252 -t utf-8 filename.from > filename.to

Pour l'enregistrement, fichier me donne ceci sur l'une de ces technologies de texte MD5:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
5
quack quixote

Êtes-vous sûr que "ANSI" est le nom de codage/entrée de caractères correct pour iconv? Vous pouvez essayer d'exécuter "fichier fichier fichier.php", souvent le fichier dira (ce qu'il pense) le codage est. Vous pouvez également essayer de ne pas spécifier le codage from lors de la conversion, ou vous pouvez simplement les essayer:

for i in `iconv -l`; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done
1
hlovdal

Plusieurs codages sont appelés "ANSI" dans Windows. En fait, ANSI est un malinomère . iconv n'a aucun moyen de deviner que vous voulez.

L'encodage ANSI est l'encodage utilisé par les fonctions "A" dans l'API Windows (les fonctions "W" utilisent UTF-16). Le codage qui correspond généralement dépend d'une langue du système Windows. Le plus courant est le CP 1252 (également appelé Windows-1252). Ainsi, lorsque votre éditeur indique ANSI, c'est la signification "quelles que soient les fonctions de l'API utilisent comme codage ANSI par défaut", qui est l'encodage non-unicode par défaut utilisé dans votre système (et donc habituellement celui utilisé pour les fichiers texte).

Donc, pour convertir correctement le fichier, vous devez d'abord savoir quel est le codage "ANSI" pour votre système Windows (ou posez simplement votre éditeur de texte à enregistrer à l'aide d'un codage spécifique).

1
CesarB

Vous pouvez simplement le convertir en UTF-8 avec NotePad ++.

1
Matthew Talbert