2009-03-08 5 views
5

Ich habe eine Anforderung, wo ein Client eine Datei in Codierung ANSI liefern wird, aber mein System kann nur eine Datei in UNICODE erfolgreich lesen. Wie gehe ich dieses Problem an? Ich weiß, wenn ich die Datei als UNICODE-Datei speichern möchte, wird die Datei abgeholt. Es ist schwierig, den Kunden dazu zu bringen, unsere Anfrage zu erfüllen. Kann ich also ein Batch-Programm für diesen Ordner haben, um diese Datei in UNICODE zu konvertieren und dann abzuholen?Wie konvertiert man *. TXT-Datei in Unicode

+1

Wenn Sie "Unicode" sagen, meinen Sie UTF8, UTF16, UTF32 oder eine andere Darstellung? Und wie werden Sie den Quellcode erkennen, wenn er nicht Unicode ist? Auf welcher Plattform bist du? –

+3

Die meisten Leute denken UTF-32 = Unicode. Ich beschuldige MS und ihre "Speichern als" -Optionen für diese Idee, die unter den Massen so weit verbreitet ist. Traurig, einen Entwickler zu sehen (wer sollte es besser wissen). –

+0

MS verwendet meistens UCS-2, nicht UTF-32. – flodin

Antwort

5

recode könnte den Job machen.

17

iconv kann das tun:

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

können Sie auch leicht Codierungen in Python konvertieren:

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

Hier ist eine Lösung Powershell

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

Weder ANSI noch Unicode sind Kodierungen. Sie müssen die ANSI-Codepage der Eingabedatei und die Unicode-Codierung kennen ding (UTF8 oder UTF16 - LE oder BE), bevor Sie eines der vorgeschlagenen Tools (wie iconv) verwenden können

+0

Ich wünschte, ich könnte das mehr aufwerten. Für die meisten Windows-Benutzer bedeutet "Unicode" UTF32. Die meisten westeuropäischen Sprachen verwenden die Codepage "Latin1", so dass die meisten davon ausgehen, dass es sich um eine "ANSI" -Codierung handelt (wiederum beschuldige ich MS für ihre Wortverwendung in ihren "Speichern unter" -Optionen). –

+0

Wir könnten hinzufügen, dass beim Blick in Systemsteuerung-> Ländereinstellungen-> Erweiterte Optionen zeigt, welche ANSI-Codeseiten installiert und verwendet werden. –

+3

Auf Windows-Systemen bedeutet "Unicode" normalerweise UTF-16. –

1

Ich ging durch einige der oben genannten Tools, viele von ihnen erfordern Befehlszeile.

Ich fand eine viel einfachere Möglichkeit zum Konvertieren von Dateien in Windows.

  1. Installieren Notepad2 (http://www.flos-freeware.ch/). Es ist Open Source und kostenlos.

  2. öffnen Sie die Datei hat ANSI-Codierung,

  3. Double Click "ANSI" Wort an der Unterseite,

  4. neuen Encoding wählen wie "UTF-8"

  5. Speichern Sie die Datei.

Es sind nur ein paar Klicks, um die Arbeit zu erledigen.

Plus, können Sie den Inhalt überprüfen, sobald getan, um zu überprüfen.

Notepad2 hat verschiedene Vorteile gegenüber Notepad. Hervorgehoben Code, Undo/Redo usw.

: D

+0

Ich sehe nicht, wie es einfacher ist, die Kodierung über die Notepad2-Benutzeroberfläche zu ändern, als die Befehlszeile zu verwenden, besonders bei mehreren Dateien. – ehambright

+0

GUI ist für keinen Zweck: X Commandline brauchen Abhängigkeit ... notepad ++ ist nur Klick Klick klicken ... – CodeFarmer

0

Rubin oneliner, FWIW:

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

Wenn Ihre Eingabedatei ist schrecklich könnten Sie tack STDIN.binmode; STDOUT.binmode; auf der Vorderseite des Ruby-Skript benötigen.

Verwandte Themen