2009-03-08 10 views
5

J'ai une exigence où un client fournira un fichier ANSI, mais mon système ne peut lire avec succès un fichier en UNICODE. Alors, comment puis-je résoudre ce problème? Je sais quand je "sauvegarde" le fichier en tant que codé UNICODE le fichier est ramassé. Il est difficile de faire en sorte que le client se conforme à notre demande. Alors puis-je avoir un programme de traitement par lots pour ce dossier pour convertir ce fichier en UNICODE, puis ramasser?Comment convertir le fichier * .txt en Unicode

+1

Quand vous dites 'Unicode', voulez-vous dire UTF8, UTF16, UTF32, ou une autre représentation? Et comment allez-vous repérer le jeu de code source lorsqu'il n'est pas Unicode? Quelle plate-forme êtes-vous? –

+3

La plupart des gens pensent que UTF-32 = Unicode. Je blâme MS et leurs options "Save As" pour que cette idée soit si répandue parmi les masses. Triste de voir un développeur (qui devrait savoir mieux) le partager. –

+0

MS utilise principalement UCS-2, pas UTF-32. – flodin

Répondre

5

recode pourrait faire le travail.

17

iconv peut faire:

Usage: iconv [OPTION...] [FILE...] 
Convert encoding of given files from one encoding to another. 

Input/Output format specification: 
    -f, --from-code=NAME  encoding of original text 
    -t, --to-code=NAME   encoding for output 

Information: 
    -l, --list     list all known coded character sets 

Output control: 
    -c       omit invalid characters from output 
    -o, --output=FILE   output file 
    -s, --silent    suppress warnings 
     --verbose    print progress information 

    -?, --help     Give this help list 
     --usage    Give a short usage message 
    -V, --version    Print program version 

Mandatory or optional arguments to long options are also mandatory or optional 
for any corresponding short options. 

For bug reporting instructions, please see: 
<http://www.gnu.org/software/libc/bugs.html>. 
4

Vous pouvez aussi facilement convertir encodages en python:

inf = open("infile.txt") 
data = inf.read().decode("latin1") 
inf.close() 

outf = open("outfile.txt", "w") 
outf.write(data.encode("utf-8")) 
outf.close() 
3

est ici une solution Powershell

$lines = gc "pathToFile" 
$lines | out-file -enconding Unicode 
11

Ni ANSI ni Unicode sont encodages. Vous devez connaître la page de code ANSI du fichier d'entrée et l'enco Unicode ding (UTF8 ou UTF16 - LE ou BE) avant de pouvoir utiliser l'un des outils suggérés (comme iconv)

+0

Souhaite que je pourrais upvote cela plus. Pour la plupart des utilisateurs de Windows, "Unicode" signifie UTF32. La plupart des langues d'Europe occidentale utilisent la page de codes Latin1, donc la plupart des gens supposent que c'est l'encodage "ANSI" (encore une fois, je blâme MS pour leur utilisation des mots dans leurs options "Enregistrer sous"). –

+0

Nous pourrions ajouter que regarder dans Panneau de configuration-> Paramètres régionaux-> Options avancées montrera quelles pages de code ANSI sont installées et utilisées. –

+3

Sur les systèmes Windows, "Unicode" signifie généralement UTF-16. –

1

J'ai parcouru certains des outils mentionnés ci-dessus, beaucoup d'entre eux nécessitent une ligne de commande.

J'ai trouvé un moyen beaucoup plus facile de convertir les fichiers en Windows.

  1. Installation Notepad2 (http://www.flos-freeware.ch/). C'est open source et gratuit.

  2. Ouvrez le fichier a ANSI encodage,

  3. Double Cliquez sur mot "ANSI" en bas,

  4. Sélectionner nouveau codage tel que "UTF8"

  5. Enregistrez le fichier.

Il suffit de quelques clics pour effectuer le travail.

De plus, vous pouvez facilement revoir le contenu une fois fait pour revérifier.

Le Bloc-notes2 présente divers avantages par rapport au Bloc-notes. Code mis en surbrillance, Undo/Redo etc.

: D

+0

Je ne vois pas comment il est plus facile de changer l'encodage en utilisant l'interface graphique Notepad2 que d'utiliser la ligne de commande, en particulier avec plusieurs fichiers à faire? – ehambright

+0

GUI est pour le cerveau: X Commandline besoin de dépendance ... notepad ++ est juste cliquez sur cliquez ... – CodeFarmer

0

Ruby oneliner, FWIW:

ruby -e 'STDOUT.write STDIN.read.force_encoding(Encoding::WINDOWS_1252).encode!(Encoding::UTF_8)' <infile.csv> outfile.csv 

Si votre fichier d'entrée est horrible vous pourriez avoir besoin amure STDIN.binmode; STDOUT.binmode; à l'avant du script Ruby.

Questions connexes