2017-09-20 6 views
2

Je reçois le fichier texte de format de codage aléatoire, usc-2le, ansi, utf-8, usc-2be etc. Je dois convertir ces fichiers en utf8.Comment trouver le type de codage de fichier ou convertir n'importe quel type de codage en UTF-8 dans shell?

Pour la conversion AM à l'aide de la commande suivante

iconv options -f from-encoding -t utf-8 <inputfile > outputfile

Mais si elles sont incorrectes from-encoding est fourni, le fichier incorrect est généré.

Je veux un moyen de trouver le type de codage de fichier d'entrée.

Merci à l'avance

+0

Veuillez améliorer votre question en en disant plus: Comment obtenez-vous ce fichier? De qui et d'où? Quel est ce fichier susceptible de contenir? –

+0

fichier est placé dans un dossier d'entrée fixe. – dhpratik

+1

Cela devrait aller dans la question (pas dans un commentaire). Mais * qui * a placé ce fichier? Demandez-lui quel encodage il a utilisé! "Codage aléatoire" n'existe pas (vous voulez dire que l'encodage vous est inconnu, et vous devriez faire ce qu'il faut pour trouver celui qui a été utilisé, ou bien ignorer ce fichier) –

Répondre

0

Nous ne fichier conversion avec encodage

vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename 

Il fonctionne très bien, pas besoin de donner le codage source.

+1

Comment peut-être cette réponse est la acceptée? Cela valide simplement qu'un fichier est UTF8 sans changer son encodage UTF8! et cette réponse ne répond pas du tout à la question (qui concerne un encodage * inconnu *) –

+0

essayer la commande ci-dessus et s'il vous plaît laissez-nous savoir – sushant

+0

Cette commande ne change pas (ou découvrir) le codage du fichier d'entrée inconnu –

3

Sur Linux, vous pouvez essayer d'utiliser file(1) sur votre fichier d'entrée inconnue. La plupart du temps, il devinerait l'encodage correctement. Ou bien essayez plusieurs codages jusqu'à iconv jusqu'à ce que vous "sentez" que le résultat est acceptable (par exemple si vous savez que le fichier est de la poésie russe, vous pouvez essayer KOI-8, UTF-8, etc .... jusqu'à ce que vous reconnaissez un bon poème russe). Mais character encoding est un cauchemar et peut être ambigu. Le fournisseur du fichier devrait vous dire quel encodage il a utilisé (et il n'y a aucun moyen d'obtenir ce codage de manière fiable et dans tous les cas: il y a quelques séquences d'octets qui seraient valides et interprétées différemment avec différents encodages).

(notez que le protocole HTTP mentionne et explicit l'encodage)

En 2017, mieux utiliser UTF-8 everywhere (et vous devriez suivre cette http://utf8everywhere.org/ lien) afin de demander à vos partenaires humains de vous envoyer UTF-8 (espérons-le la plupart de vos fichiers sont en UTF-8, car aujourd'hui ils devraient tous l'être).

(si l'encodage est plus une sociale question que technique)

Je reçois un fichier texte de format de codage aléatoire

Notez que « le codage aléatoire » ne pas exister. Vous voulez et devez savoir ce que character encoding (et file format) a été utilisé par le fournisseur de ce fichier (donc vous voulez dire "encodage inconnu", pas "aléatoire").

BTW, avez-vous une définition formelle, sans ambiguïté, le son et précise de text file, au-delà de fichier sans zéro octets, ou des fichiers avec quelques caractères de contrôle? LaTeX, C source, Markdown, SQL, UUencoding, shar, XPM, et HTML fichiers sont tous les fichiers texte, mais très différents!

Vous voulez probablement attendre le format UTF-8, et vous pourriez utiliser le file extension comme indice. Sachant le media-type pourrait aider.

(donc si HTTP a été utilisé pour transférer le fichier, il est important de garder (et la confiance) ... le Content-Type, lire sur HTTP headers)

[...] alors incorrect le fichier est généré.

Comment savez-vous que le fichier résultant est incorrect? Vous pouvez seulement savoir si vous avez des attentes à propos de ce résultat (par exemple qu'il contient de la poésie russe, pas des caractères indésirables, mais peut-être ces caractères indésirables sont certains d'un interprète secret, ou de la musique représentée de façon bizarre, cryptée, etc. ...). Les fichiers bruts ne sont que des séquences d'octets, vous avez besoin de connaissances supplémentaires pour les utiliser (même si vous savez qu'ils utilisent UTF-8).

+0

La commande 'file' ne retourne que" data " ',' fichier régulier' ou 'ascii'. Donc j'ai besoin d'avoir une garantie d'encodage de fichier d'entrée. – dhpratik

+1

Vous ne pouvez pas être certain. Vous devez demander à la personne fournissant le fichier quel encodage a été utilisé. Ou vous pouvez essayer plusieurs encodages jusqu'à ce que vous * ressentiez * que vous avez décodé ce fichier avec succès –