Mam wymaganie, gdy klient dostarczy plik w kodowaniu ANSI, ale mój system może tylko z powodzeniem odczytać plik w standardzie UNICODE. Jak więc rozwiązać ten problem? Wiem, kiedy zapisuję plik jako kodowany w standardzie UNICODE, a plik jest pobierany. Trudno jest dostosować klienta do naszej prośby. Więc czy mogę mieć jakiś program wsadowy dla tego folderu, aby przekonwertować ten plik na UNICODE, a następnie odebrać?Jak przekonwertować plik * .txt na Unicode
Odpowiedz
recode może wykonać zadanie.
iconv
może to zrobić:
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>.
Można również łatwo konwertować kodowania w Pythonie:
inf = open("infile.txt")
data = inf.read().decode("latin1")
inf.close()
outf = open("outfile.txt", "w")
outf.write(data.encode("utf-8"))
outf.close()
Oto rozwiązanie PowerShell
$lines = gc "pathToFile"
$lines | out-file -enconding Unicode
Ani ANSI ani Unicode są kodowania. Będziesz musiał znać stronę kodową ANSI pliku wejściowego i enco Unicode ding (UTF8 lub UTF16 - LE lub BE) przed użyciem jednego z sugerowanych narzędzi (takich jak iconv)
Żałuję, że nie mogłem tego zrobić więcej. W przypadku większości użytkowników systemu Windows "Unicode" oznacza UTF32. Większość języków zachodnioeuropejskich używa strony kodowej Latin1, więc większość ludzi zakłada kodowanie "ANSI" (ponownie, winię MS za użycie słów w ich opcjach "Zapisz jako"). –
Możemy dodać, że patrząc na Panel Sterowania-> Ustawienia regionalne-> Opcje zaawansowane pokaże, które strony kodowe ANSI są instalowane i używane. –
W systemach Windows "Unicode" zwykle oznacza UTF-16. –
Przeszedłem przez niektóre narzędzia wspomniane powyżej, wiele z nich wymaga linii poleceń.
Znalazłem o wiele łatwiejszy sposób konwertowania plików w systemie Windows.
Instalacja Notepad2 (http://www.flos-freeware.ch/). Jest otwarty i bezpłatny.
Otwórz plik ma kodowanie ANSI
kliknij dwukrotnie "ANSI" słowo na dole,
wybrać nowe kodowanie takie jak "utf8"
zapisać plik.
To tylko kilka kliknięć, aby wykonać pracę.
Co więcej, można raz przeglądać zawartość, aby dokonać podwójnego sprawdzenia.
Notepad2 ma wiele zalet w stosunku do Notatnika. Kod podświetleniu Undo/Redo itp
: D
Nie widzę, jak zmiana kodowania za pomocą interfejsu GUI Notepad2 jest łatwiejsza niż użycie wiersza poleceń, szczególnie w przypadku wielu plików? – ehambright
GUI jest bezużyteczne: X Polecenie wymaga zależności ... notepad ++ to po prostu kliknij, kliknij, kliknij ... – CodeFarmer
Ruby oneliner, FWIW:
ruby -e 'STDOUT.write STDIN.read.force_encoding(Encoding::WINDOWS_1252).encode!(Encoding::UTF_8)' <infile.csv> outfile.csv
Jeśli plik wejściowy jest straszne może trzeba taktykę STDIN.binmode; STDOUT.binmode;
na przedniej części skryptu Ruby.
Kiedy mówisz "Unicode", masz na myśli UTF8, UTF16, UTF32 lub jakąś inną reprezentację? Jak rozpoznać kod źródłowy, gdy nie jest to kod Unicode? Na której platformie jesteś? –
Większość ludzi myśli UTF-32 = Unicode. Obwiniam stwardnienie rozsiane i ich "Zapisz jako" opcje dla tego pomysłu, który jest tak powszechny wśród mas. Smutno, gdy zobaczysz programistę (który powinien wiedzieć lepiej), który go udostępnia. –
MS używa głównie UCS-2, a nie UTF-32. – flodin