Excel do CSV z kodowaniem UTF8 [zamknięte]


607

Mam plik Excel zawierający hiszpańskie znaki (tyldy itp.), Które muszę przekonwertować na plik CSV, aby użyć go jako pliku importu. Kiedy jednak zapisuję jako CSV, manguje „specjalne” hiszpańskie znaki, które nie są znakami ASCII. Wydaje się, że robi to również z lewymi i prawymi cudzysłowami i długimi myślnikami, które wydają się pochodzić od pierwotnego użytkownika tworzącego plik Excel na Macu.

Ponieważ CSV jest tylko plikiem tekstowym, jestem pewien, że obsługuje kodowanie UTF8, więc domyślam się, że jest to ograniczenie programu Excel, ale szukam sposobu na przejście z Excela do CSV i zachowanie znaków spoza ASCII nienaruszony.


15
Widziałem to pytanie, zanim opublikowałem, ale chodzi o to, aby mieć już plik CSV UTF8 i otworzyć go w programie Excel, a nie na odwrót.
Jeff Treuting

7
Poniższe odpowiedzi wydają się działać, ale są to tylko obejścia. Czy ktoś wie, jak zmusić Excela do zrobienia tego?
NielW

2
Chciałem upuścić moje 2 centy: po wielu próbach i błędach, próbach użycia funkcji VBA itp. (Używam Excel 97 z różnych powodów) ... po prostu Zapisywanie jako „CSV (MSDOS) „Format rozwiązał ten problem. W moim przypadku webinar Citrix (GotoWebinar) CSV kończy się znakami, które łamią część kodu Apex na naszym końcu - zapisanie do „CSV (MSDOS)” rozwiązuje (wcześniej) ładowanie eksportu CSV do Notepad ++ i wklejanie go do UTF- 8 pusty plik i ponowne zapisywanie. :-P :-)
AMM

2
Jest to bardzo denerwujące ograniczenie programu Excel. Otworzyłem prośbę o funkcję faktury użytkownika na ten temat: excel.uservoice.com/forums/… , zagłosuj i spraw , by tak się stało
Doron Yaacoby

7
zgodnie z fakturą użytkownika Excel, Microsoft rozpoczął pracę nad UTF-8 dla .csv w zeszłym miesiącu excel.uservoice.com/forums/…
moloko

Odpowiedzi:


405

Prostym obejściem jest użycie arkusza kalkulacyjnego Google. Wklej (wartości tylko, jeśli masz złożone formuły) lub zaimportuj arkusz, a następnie pobierz CSV. Właśnie wypróbowałem kilka postaci i działa całkiem dobrze.

UWAGA: Arkusze Google mają ograniczenia podczas importowania. Zobacz tutaj .

UWAGA: Uważaj na wrażliwe dane dzięki Arkuszom Google.

EDYCJA: Kolejna alternatywa - w zasadzie używają makra VB lub dodatków, aby wymusić zapis jako UTF8. Nie próbowałem żadnego z tych rozwiązań, ale brzmią rozsądnie.


63
Być może Joel Slotsky (były szef Excela) mógłby wysłać im swój dziesięcioletni post na Absolutnym minimum Każdy programista absolutnie, pozytywnie musi wiedzieć o Unicode i zestawach znaków ?
Indolering

8
Przy normalnym Notatniku Windows (użycie opcji Zapisz jako, a następnie wybranie utf-8 w opcji kodowania) działało dla mnie. Dla mnie to najlepsze podejście, ponieważ muszą to zrobić użytkownicy, którzy nie mają uprawnień administratora na swoich komputerach, więc instalacja dodatkowego oprogramowania nie jest wymagana.
Fer

9
OpenOffice JustWorks (tm) bez kłopotów - myślę, że należy to uwzględnić
Rbjz

9
Uhhh Po prostu dreszcz przebiegł mi po plecach. Co jeśli twój plik Excel ma 200 000 linii? Lub zawiera wrażliwe dane, których nie chcesz uwzględniać w arkuszu kalkulacyjnym programu Excel? W razie potrzeby użyj Openoffice / Libreoffice.
Seb

2
Co jeśli rozmiar pliku jest duży? Arkusz Goolge ma limit rozmiaru około 75M, jeśli dobrze pamiętam. Mam plik 700M
News_is_Selection_Bias

133

Odkryłem, że aplikacja do obsługi arkuszy kalkulacyjnych OpenOffice , Calc, jest naprawdę dobra w obsłudze danych CSV.

W oknie dialogowym „Zapisz jako ...” kliknij „Opcje formatu”, aby uzyskać różne kodowania dla CSV. LibreOffice działa w ten sam sposób, co AFAIK.

okno dialogowe zapisu


Jestem pewien, że to działa, ale nie mam już OpenOffice, więc Dokumenty Google były łatwiejsze w mojej sytuacji. ale dzięki za sugestię
Jeff Treuting

19
OpenOffice Calc ma więcej i lepsze opcje podczas otwierania i zapisywania plików „CSV” (separatory pól, kodowanie itp.) Niż zarówno Dokumenty Google, jak i Excel. Ponadto w Dokumentach Google występuje obecnie limit 400 000 komórek na arkusz kalkulacyjny, czego nie robi OpenOffice Calc.
Christian Davén,

3
Mogę potwierdzić, że LibreOffice działa również: oferuje opcje kodowania znaków podczas eksportu, których niestety brakuje w Excelu.
Rupert Rawnsley

1
Jest to świetna opcja dla osób pracujących z wrażliwymi danymi. Pakiet OpenOffice może być przenośną instalacją dla osób z zablokowanymi maszynami.
Nathan

119
  1. Zapisz arkusz Excela jako „Tekst Unicode (.txt)”. Dobrą wiadomością jest to, że wszystkie znaki międzynarodowe są w UTF16 (uwaga, nie w UTF8). Jednak nowy plik „* .txt” jest rozdzielany znakami TAB, a nie przecinkami, a zatem nie jest prawdziwym plikiem CSV.

  2. (opcjonalnie) O ile nie możesz użyć pliku rozdzielanego tabulatorami do importowania, użyj swojego ulubionego edytora tekstowego i zamień znaki TAB przecinkami „,”.

  3. Zaimportuj plik * .txt do aplikacji docelowej. Upewnij się, że akceptuje format UTF16.

Jeśli UTF-16 został poprawnie zaimplementowany z obsługą punktów kodowych innych niż BMP, możesz przekonwertować plik UTF-16 na UTF-8 bez utraty informacji. Pozostawiam wam znalezienie swojej ulubionej metody.

Korzystam z tej procedury do importowania danych z Excela do Moodle.


5
Wreszcie coś, co zadziałało! Wypróbowałem powyższe opcje Excela w Excel 2013 bez powodzenia. Właśnie przestawiłem się na użycie \ t jako rozdzielonego znaku, kiedy go przeanalizowałem i zadziałało idealnie!
Mattias Lindberg

1
Musiał wyeksportować XLS jako CSV, aby zaimportować do MySQL. Za pomocą programu Excel 2003 wyeksportowałem w formacie „Tekst Unicode (.txt)”, następnie użyłem Notepad ++ do zamiany TAB ;, a następnie zaimportowałem plik txt do phpmyadmin z domyślnym „Zestawem znaków pliku: utf-8”, Format „CSV using LOAD DATA ”. Wszystkie kodowania zostały przesłane poprawnie.
Kai Noack

3
Dziękuję Ci. To ma sens. Dlaczego stwardnienie rozsiane wciąż odmawia użycia UTF jako standardu bije mnie.
Oskar Limka

4
@OskarLimka: Kiedy mówisz „UTF”, masz na myśli UTF-8 czy UTF-16? Ponieważ Microsoft dość często używa UTF-16.
Flimm,

7
„Dobrą wiadomością jest to, że wszystkie znaki międzynarodowe są w UTF16 (uwaga, nie w UTF8)”. : kompletny nonsens . UTF-8 i UTF-16 to dwa sposoby kodowania całego zestawu punktów kodowych Unicode.

43

Wiem, że to stare pytanie, ale natknąłem się na to pytanie, walcząc z tymi samymi problemami co OP.

Nie znajdując żadnego z proponowanych rozwiązań, które jest realną opcją, postanowiłem dowiedzieć się, czy można to zrobić za pomocą Excela.

Na szczęście odkryłem, że problem z utraconą postacią występuje tylko (w moim przypadku) podczas zapisywania z formatu xlsx do formatu csv. Próbowałem najpierw zapisać plik xlsx do xls, a następnie do csv. To faktycznie działało.

Spróbuj i sprawdź, czy to działa dla Ciebie. Powodzenia.


3
Dla mnie w programie Excel dla komputerów Mac 2011 działa to, ale tylko jeśli wybiorę Windows comma separated (CSV). Nie działa, jeśli użyję opcji domyślnej lub DOS CSV - obie te znaki zastępują znaki akcentowane losowymi śmieciowymi postaciami. Przetestowane znaków włącznie é, è, â... Nie wiem, czy to jest prawdziwe UTF8 ale bohaterowie nie są zniekształcone.
user56reinstatemonica8

12
Szybkie potwierdzenie - pliki utworzone za pomocą tej metody (Excel dla komputerów Mac 2011) nie generują plików CSV w formacie UTF-8, ALE , generują pliki CSV, które zawierają co najmniej prawidłowe znaki i dlatego można je bezboleśnie przekonwertować na format UTF8 w edytorze tekstu , co stanowi duży krok naprzód od absurdalnie zniszczonych śmieci, które program Excel domyślnie wyrzuca.
user56reinstatemonica8

Tak, zgodziłem się, to również działało dla mnie (Excel Mac 2011) i naprawdę zasługuje na więcej pochwał.
cbmanica,

1
To nie do końca działało dla mnie (przy użyciu programu Excel 2007). W swoim pliku miałem 2 znaki spoza ASCII, a jeden z nich został zapisany w ten sposób OK, drugi nie.
EM0,

1
Zauważ, że wynikowy plik CSV będzie w UTF-16, a nie w UTF-8, jak zadawane pytanie.
Flimm,

38

Możesz użyć polecenia iconv w systemie Unix (dostępnym także w systemie Windows jako libiconv ).

Po zapisaniu jako CSV w Excelu w wierszu poleceń wpisz:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(pamiętaj, aby zastąpić CP1250 kodowaniem).

Działa szybko i doskonale nadaje się do dużych plików, takich jak baza kodów pocztowych, których nie można zaimportować do GoogleDocs (limit 400 000 komórek).


5
Jest to bezużyteczne, jeśli treść zawiera znaki, których nie można zakodować w 1250, lepszym sposobem byłoby wyeksportowanie jako „Unicode .txt” w programie Excel i użycie iconv do konwersji z Utf16. Może także zrobić a sedlub trprzetłumaczyć z „\ t” na „”
Sebastian,

5
Domyślnym kodowaniem programu Excel wydaje się być CP858 podczas zapisywania jako CSV lub MS-DOS CSV oraz Windows 1252 podczas zapisywania jako Windows CSV (testowane w programie Excel dla komputerów Mac 2011).
claymation

4
Całkowicie się zgadzam, że jest to bezużyteczne, ponieważ gdy Excel zapisuje w formacie .csv, traci informacje, jeśli chodzi o punkty kodowe Unicode, których nie można zakodować w kodowaniu jeden bajt na kod.
Flimm,

26

Możesz to zrobić na nowoczesnym komputerze z systemem Windows bez oprogramowania innych firm. Ta metoda jest niezawodna i obsługuje dane zawierające przecinki, tabulatory, znaki CJK itp.

1. Zapisz z Excela

W programie Excel zapisz dane, file.txtużywając tego typu Unicode Text (*.txt).

2. Uruchom PowerShell

Uruchom powershellz menu Start.

3. Załaduj plik w PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. Zapisz dane jako CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

2
Ta metoda doskonale działała w przypadku pliku CSV z ponad 15 000 rekordów, z wierszami przekraczającymi limit 1024 znaków narzucony przez Notatnik. Zajmuje to sekundy i nie używa oprogramowania innych firm. Dzięki!
absolutnie

Ahh, nawet kiedy próbowałem używać Arkuszy Google, napotkałem ten sam problem. Więc może ta strategia PowerShell działałaby. Oto mój problem. W przypadku niektórych znaków, takich jak niektóre emotikony, należy używać w CHARACTER SET utf8mb4sposób opisany tutaj: stackoverflow.com/a/10959780/470749
Ryan

1
@Ryan Ten problem dotyczy MySQL. Właśnie wypróbowałem problematyczną postać w tym pytaniu i działała dobrze zarówno w Excelu, jak i PowerShell.
Don Cruickshank

24

Jedyny „łatwy sposób” na dokonanie tego jest następujący. Po pierwsze, uświadom sobie, że istnieje różnica między tym, co jest wyświetlane, a tym, co jest ukryte w pliku Excel .csv.

  1. Otwórz plik Excel, w którym masz informacje (.xls, .xlsx)
  2. W programie Excel wybierz „CSV (rozdzielany przecinkami) (* .csv) jako typ pliku i zapisz jako ten typ.
  3. W NOTEPAD (znajduje się w „Programy”, a następnie Akcesoria w menu Start) otwórz zapisany plik .csv w Notatniku
  4. Następnie wybierz -> Zapisz jako ..., a na dole pola „Zapisz jako” znajduje się pole wyboru oznaczone jako „Kodowanie”. Wybierz UTF-8 (NIE używaj ANSI lub stracisz wszystkie akcenty itp.). Po wybraniu UTF-8 zapisz plik pod nieco inną nazwą niż oryginał.

Ten plik znajduje się w UTF-8 i zachowuje wszystkie znaki i akcenty. Można go zaimportować na przykład do MySQL i innych programów bazodanowych.

Ta odpowiedź pochodzi z tego forum .


9
Jest to nieprawidłowe ze względu na krok 2, zapisywanie jako CSV. Problem polega na tym, że Excel zapisuje plik CSV w cp1252, który jest kodowaniem jednobajtowym na kod. Prowadzi to do utraty informacji o znakach, które nie mieszczą się w jednym bajcie.
Flimm,

To działało dla mnie, ale nie rozumiem dlaczego. Mój plik wygenerowany przez javascript jest zawsze nieprawidłowo odczytywany w programie Excel (jako inne kodowanie). Ale kiedy otwieram w notatniku i zapisuję jako utf-8, działa dobrze! Wygląda więc na to, że istnieją metadane z kodowaniem. Jak to działa? Jeśli notatnik może zapisać pliki CSV UTF-8, a Excel może je odczytać, to czy w moim programie jest możliwe wygenerowanie prawidłowych plików CSV UTF-8, które Excel może odczytać?
felipeaf

Pracował dla mnie. W XSLX przekonwertowanym z Access. Formaty znaków diakrytycznych, tylko LF i ISO są w porządku. Ten czy inny nie działał z bardziej popularnymi rozwiązaniami.
RolfBly,

21

Kolejny, który uważam za przydatny: „ Liczby ” umożliwiają ustawienia kodowania podczas zapisywania jako CSV.


8
^ to aplikacja w Mac OSX
Sruit A.Suk

również uważaj na Liczby, ponieważ ma ograniczenie liczby wierszy, a ja przekonwertowałem dane w ten sposób, zanim nie zdawałem sobie sprawy, że przycięło niektóre z nich. Excel / CSV ma znacznie wyższe limity.
Pon.

14

„nevets1219” ma rację co do dokumentów Google, jednak jeśli po prostu „zaimportujesz” plik, często nie konwertuje go do UTF-8.

Ale jeśli zaimportujesz CSV do istniejącego arkusza kalkulacyjnego Google, zostanie on przekonwertowany na UTF-8.

Oto przepis:

  • Na głównym ekranie Dokumentów (lub Dysku) kliknij przycisk „Utwórz” i wybierz „Arkusz kalkulacyjny”
  • Z menu „Plik” wybierz „Importuj”
  • Kliknij „Wybierz plik”
  • Wybierz „Zamień arkusz kalkulacyjny”
  • Wybierz dowolny znak, którego używasz jako separatora
  • Kliknij „Importuj”
  • Z menu „Plik” wybierz „Pobierz jako” -> CSV (bieżący arkusz)

Wynikowy plik będzie w UTF-8


2
Problem z tą odpowiedzią polega na tym, w jaki sposób wygenerowałeś plik CSV. Jeśli zrobiłeś to przez symulację zapisywania jako CSV w Excelu, plik CSV będzie miał format cp1252, który jest kodowaniem jednobajtowym na punkt kodowy. Doprowadzi to do utraty informacji, jeśli chodzi o znaki, które nie mieszczą się w jednym bajcie.
Flimm,

Cóż, to jest problem z jedną z tych odpowiedzi. I będzie z każdą odpowiedzią na to, jak przekonwertować na UTF-8, ponieważ nie ma sposobu, aby wiedzieć lub kontrolować oryginalne kodowanie.
RedYeti

1
Niektóre odpowiedzi mówią o tym, jak obejść ten problem, na przykład stackoverflow.com/a/15500052/247696
Flimm

13

Korzystanie z Notepad ++

To naprawi uszkodzony plik CSV zapisany przez program Excel i ponownie zapisze go w odpowiednim kodowaniu.

  • Eksportuj CSV z Excela
  • Załaduj do Notepad ++
  • Napraw kodowanie
  • Zapisać

Excel zapisuje w CP-1252 / Windows-1252. Otwórz plik CSV w Notepad ++. Wybierz

Encoding > Character Sets > Western European > Windows-1252

Następnie

Encoding > Convert to UTF-8
File > Save

Najpierw powiedz Notepad ++ o kodowaniu, a następnie przekonwertuj. Niektóre z tych innych odpowiedzi są konwertowane bez wcześniejszego ustawienia właściwego kodowania, co jeszcze bardziej zakłóca działanie pliku. Będą obracać, co powinno być w . Jeśli twoja postać nie pasuje do CP-1252, to została już utracona, gdy została zapisana jako CSV. Użyj do tego innej odpowiedzi.


Mogę się pomylić, ale nie możesz zapisać pliku jako „.csv” w Notepad ++ i o to właśnie chodzi.
Daniel Maurer

1
Tak, możesz. Zapisujesz tylko plik tekstowy i .csvjest to plik tekstowy. Ta odpowiedź otworzy plik CSV uszkodzony przez program Excel, napraw go, a następnie ponownie zapisz z odpowiednim kodowaniem.
Chloe

To, co komunikujesz, ma daleko idące konsekwencje. Stosując tę ​​znakomitą metodę, możemy osiągnąć wyższą jakość danych! Brawo! (Quiz: dlaczego ten komentarz jest tak zagadkowy?)
thymaro

9

W programie Excel 2016 i nowszych (w tym Office 365) dostępna jest opcja CSV dedykowana formatowi UTF-8.

W Office 365 wykonaj Zapisz jako; gdzie wcześniej można było wybrać CSV ( rozdzielany przecinkami), teraz jednym z typów plików, które można zapisać, podobnie jak CSV UTF-8 (rozdzielany przecinkami) (* .csv)


1
Należy podać instrukcje dotyczące korzystania z tej opcji.
rovyko

1
@dexgecko na pewno: nazywa się to przyciskiem / menu „Zapisz”. W programie Excel 2016 w systemie Windows są teraz cztery typy eksportu CSV: CSV zapisuje się jako „ANSI” (mniej więcej odpowiednik Latin1, ale może się różnić w przypadku instalacji systemu operacyjnego niezachodniego, nie jestem pewien), CSV UTF-8 zapisuje jako UTF-8 z BOM, CSV (DOS) zapisuje jako CP850 (czy mais zależy od instalacji?), a CSV (Mac) zapisuje jako MacRoman.

Jednak Excel będzie mógł odczytywać tylko pliki UTF-8 i ANSI CSV (Excel może użyć BOM do wyboru). Aby zaimportować z innego kodowania, zmień nazwę na .txt, otwórz z Excela (masz wtedy długą listę kodowań do wyboru), a ponieważ nie będzie on poprawnie interpretował separatora, użyj przycisku „przekonwertuj”, aby podzielić wiersze. Tej sztuczki można również użyć podczas importowania pliku CSV z innej konwencji językowej (na przykład w języku francuskim separatorem plików jest średnik, ponieważ przecinek jest już używany jako separator dziesiętny).

1
@ Jean-ClaudeArbaut Dziwne, nie widzę opcji UTF-8 CSV w moim Excelu 2016.
rovyko

1
@dexgecko Strange, rzeczywiście. Według tej strony (w języku francuskim, przepraszam), funkcjonalność została dodana w listopadzie 2016 r., W wersji kompilacji 1610. Obecnie mam wersję 1802. Jednak myślałem, że tylko Office 365 ma tego rodzaju ewolucje i używam Office Pro 2016 (nie smak 365). Może spróbuj zaktualizować pakiet Office.

8

Dla tych, którzy szukają całkowicie programowego (lub przynajmniej po stronie serwera) rozwiązania, odniosłem wielki sukces, używając narzędzia xls2csv catdoc.

Zainstaluj catdoc:

apt-get install catdoc

Wykonaj konwersję:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

To płonie szybko.

Pamiętaj, że ważne jest, aby dołączyć -d utf-8flagę, w przeciwnym razie koduje ona dane wyjściowe w domyślnym cp1252kodowaniu i ryzykujesz utratą informacji.

Pamiętaj, że xls2csvdziała również tylko z .xlsplikami, nie działa z .xlsxplikami.


Lub wybierz inne kodowanie wyjściowe, nie możesz rozwiązać problemów wszystkich za pomocą jednej odpowiedzi :-)
mpowered

2
Wiem, że to niefortunne, ale faktem jest, że ta odpowiedź będzie powodować problemy dla niektórych użytkowników. Fakt, że kiedykolwiek używałeś tego tylko z postaciami pasującymi do cp1252, jest po prostu szczęśliwy, w odpowiedzi nie podałeś żadnego ostrzeżenia o tym ryzyku, po prostu powiedziałeś, że „zadziałało bez żadnych problemów”. Nie zostałeś poproszony o naprawienie problemów wszystkich, tylko OP, które dzielą wiele osób.
Flimm,

1
Proszę bardzo, naprawiłem problem w odpowiedzi i usunąłem głosowanie negatywne.
Flimm,

7

Co z użyciem programu PowerShell.

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

1
Tekst hiszpańskich znaków innych niż ascii zostanie zmieniony z oryginalnego hiszpańskiego na ciąg kodowania używany przez ANSI. Tak więc tekst nie będzie taki sam jak oryginał.
Jason Williams

7

Najłatwiejszy sposób: nie ma potrzeby otwierania dokumentów biurowych i google

  1. Zapisz plik jako „plik tekstowy Unicode”;
  2. teraz masz plik tekstowy Unicode
  3. otwórz go za pomocą „notatnika” i „Zapisz jako”, wybierając „utf-8” lub inną stronę kodową, którą chcesz
  4. zmień nazwę rozszerzenia pliku z „txt” na „csv”. Spowoduje to utworzenie pliku CSV rozdzielanego tabulatorami.
  5. Jeśli chcesz plik rozdzielany przecinkami , otwórz csvplik, którego nazwę właśnie zmieniono, i zastąp wszystkie karty przecinkami. Aby to zrobić w Notatniku na Win 10, wystarczy wybrać jedno pole karty, a następnie kliknąć Ctrl+H. W oknie, które zostanie otwarte, wpisz przecinek ,w polu „Zamień na”, a następnie kliknij „Zamień wszystko”. Zapisz swój plik. Rezultatem będzie plik csv rozdzielany przecinkami.

Nie otwieraj go w MS Office! Teraz masz plik CSV rozdzielany tabulatorami. Lub rozdzielany przecinkami, jeśli zastosowałeś krok numer 5.


2
W przypadku pliku rozdzielanego tabulatorami lepszym rozwiązaniem może być .txtrozszerzenie. csv, tzn. pliki oddzielone przecinkami, jest po prostu mylące.
dof1985

5

Choć może się to wydawać śmieszne, najłatwiejszym sposobem, aby zapisać 180 MB arkusza kalkulacyjnego w pliku CSV UTF8, było wybranie komórek do Excela, skopiowanie ich i wklejenie zawartości schowka do SublimeText.


1
Działa to, ponieważ Excel udostępnia wersję zaznaczenia TSV za pośrednictwem schowka. Możesz równie dobrze korzystać z Notatnika zamiast SublimeText, ale pamiętaj, aby zaoszczędzić dzięki kodowaniu UTF-8, jeśli to zrobisz!
Don Cruickshank


3

Zakładając środowisko Windows, zapisz plik i pracuj z nim jak zwykle w Excelu, ale następnie otwórz zapisany plik Excela w Gnome Gnumeric (bezpłatny). Zapisz arkusz kalkulacyjny Gnome Gnumeric jako CSV, który - w każdym razie dla mnie - zapisuje go jako UTF-8 CSV.


3

Łatwy sposób: pobierz open office ( tutaj ), załaduj arkusz kalkulacyjny i otwórz plik Excel ( .xlslub .xlsx). Następnie zapisz go jako tekstowy plik CSV, a otworzy się okno z prośbą o zachowanie bieżącego formatu lub zapisanie go w formacie .ODF. wybierz „zachowaj bieżący format” iw nowym oknie wybierz opcję, która działa lepiej dla Ciebie, zgodnie z językiem, w którym plik został zapisany. W przypadku języka hiszpańskiego wybierz opcję Europa Zachodnia ( Windows-1252/ WinLatin 1), a plik działa dobrze. Jeśli wybierzesz Unicode ( UTF-8), nie będzie działać z hiszpańskimi znakami.


3
Nie ma powodu, dla którego UTF-8 nie działałby z hiszpańskimi postaciami.
Flimm

3
  1. Zapisz plik xls (plik Excel) jako tekst Unicode => plik zostanie zapisany w formacie tekstowym (.txt)

  2. Zmień format z .txt na .csv (zmień nazwę pliku z XYX.txt na XYX.csv


3
To nie działa, ponieważ instrukcje nie zawierają niezbędnego kroku konwersji tabulatorów na przecinki w danych pliku.
Matthew Rodatus,

1
„Tekst Unicode” Excela to UTF-16, a nie UTF-8, o co pytano w pytaniu.
Flimm,

3

Natknąłem się również na ten sam problem, ale istnieje na to łatwe rozwiązanie.

  1. Otwórz plik xlsx w programie Excel 2016 lub nowszym.
  2. W „Zapisz jako” wybierz tę opcję: „(CSV UTF-8 (rozdzielany przecinkami) *. Csv)”

Działa idealnie i generowany jest plik csv, który można zaimportować do dowolnego oprogramowania. Zaimportowałem ten plik csv do mojej bazy danych SQLITE i działa idealnie z nienaruszonymi wszystkimi znakami Unicode.


Ta opcja nie jest dostępna w mojej kopii programu Excel 2016. Czy używasz wersji Office 365?
Don Cruickshank,

2

Natknąłem się na ten sam problem i przejrzał ten post. Żadne z powyższych nie działało dla mnie. W końcu przekonwertowałem plik .xls na Unicode na .xml (wybierz opcję Zapisz jako ... XML Spreadsheet 2003) i uzyskałem prawidłowy znak. Potem napisałem kod do parsowania xml i wyodrębniłem zawartość do własnego użytku.


2

Napisałem mały skrypt Pythona, który może eksportować arkusze w UTF-8.

Wystarczy podać plik Excel jako pierwszy parametr, a następnie arkusze, które chcesz wyeksportować. Jeśli nie dostarczysz arkuszy, skrypt wyeksportuje wszystkie arkusze znajdujące się w pliku Excel.

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)

Trochę zaktualizowałem implementację i utworzyłem gist gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian

2

Excel zwykle zapisuje plik csv jako kodowanie ANSI zamiast utf8.

Jedną z opcji poprawienia pliku jest użycie Notatnika lub Notepad ++:

  1. Otwórz .csv za pomocą Notatnika lub Notepad ++.
  2. Skopiuj zawartość do schowka komputera.
  3. Usuń zawartość z pliku.
  4. Zmień kodowanie pliku na utf8.
  5. Wklej zawartość ze schowka.
  6. Zapisz plik.

Nie jestem pewien co do starych wersji NP ++, ale w bieżącej wersji możesz po prostu wybrać Kodowanie> Konwertuj na UTF-8. zastępuje kroki 2-5
Felk

1

Drugą opcją dla „nevets1219” jest otwarcie pliku CSV w Notepad ++ i konwersja do ANSI.

Wybierz w górnym menu: Kodowanie -> Konwertuj na Ansi


Nie mam pojęcia, dlaczego zostałeś przegłosowany. Notepad ++ zrobił to dla mnie. Nie mogę zapisać mojego pliku w arkuszu kalkulacyjnym Google, ponieważ jest poufny.
Zane

3
Problem z tą odpowiedzią polega na tym, w jaki sposób generujesz plik CSV. Jeśli po prostu zapiszesz jako CSV z Excela, kodowanie będzie miało postać cp1252, czyli kodowania jeden bajt na kod, a zatem utraci informacje dla znaków, które do niego nie pasują. Na koniec powinieneś przekonwertować na UTF-8, a nie na Ansi, jeśli chcesz zrobić to, o co pytasz.
Flimm,

Jest to zdecydowanie łatwiejsza odpowiedź IMO. Korzystam z programu Excel 2016 i domyślnie zapisałem go w kodowaniu ANSI, ale dostałem go do UTF-8, co chciałem.
rovyko

1

Kodowanie -> Konwertuj na Ansi koduje je w ANSI / UNICODE. Utf8 jest podzbiorem Unicode. Być może w ANSI zostanie poprawnie zakodowany, ale tutaj mówimy o UTF8, @SequenceDigitale.

Są szybsze sposoby, np. Eksportowanie jako csv (rozdzielane przecinkami), a następnie otwieranie tego csv za pomocą Notepad ++ (bezpłatny), a następnie Kodowanie> Konwertuj na UTF8. Ale tylko jeśli musisz to zrobić raz na plik. Jeśli chcesz zmienić i eksportować, to najlepiej jest LibreOffice lub GDocs.


5
„Utf8 jest podzbiorem Unicode”: to nie ma sensu. UTF-8 to kodowanie Unicode.
jameshfisher

Nie jestem pewien, czy mogę znaleźć tę opcję „Kodowanie -> Konwertuj na Ansi”.
Flimm,

Po prostu plik ANSI csv w Notepad ++ i zmiana kodowania pliku na utf8 powoduje, że oryginalne hiszpańskie znaki inne niż ascii są konwertowane na ciągi kodujące, które nie pasują do oryginalnego tekstu.
Jason Williams

1

Microsoft Excel ma opcję eksportu arkusza kalkulacyjnego przy użyciu kodowania Unicode. Zobacz poniższy zrzut ekranu.

wprowadź opis zdjęcia tutaj


14
„Tekst Unicode” zapisuje się w UTF-16 LE (Little Endian), a nie w UTF-8, o co prosi OP.
siekiera.

Tak, ale jest to najlepszy sposób na uzyskanie obsługi Unicode dla wartości rozdzielanych przez x w programie Excel. Miałem wiele problemów z przekonaniem Excela do gry w piłkę z UTF-8!Czytaj więcej
mcNux 24.04.13

1

otwórz .csv w porządku z notatnikiem ++. jeśli widzisz, że twoje kodowanie jest dobre (widzisz wszystkie znaki, jakie powinny być), naciśnij kodowanie, a następnie przekonwertuj na ANSI - dowiedz się, jakie jest twoje obecne kodowanie


który działał dla mnie .. miał problem z greckimi znakami podczas eksportowania
bazy danych mysql

1
Problem polega na tym, w jaki sposób generujesz plik CSV. Jeśli po prostu zapiszesz jako plik CSV w programie Excel, zapisze go w cp1252, który jest kodowaniem jednego bajtu na kod, a zatem traci informacje.
Flimm,

1

innym rozwiązaniem jest otwarcie pliku za pomocą winword i zapisanie go jako txt, a następnie ponowne otwarcie go za pomocą programu Excel i będzie działać ISA


1

Zapisz okno dialogowe> Przycisk Narzędzia> Opcje sieciowe> Karta Kodowanie


To mi nie działa. W moim rozumieniu działa to tylko podczas zapisywania w formacie internetowym (HTML itp.), A nie podczas zapisywania jako CSV.
jogojapan

Działa dla mnie - biuro 2007
Elia Weiss

nie działa na Office 2010 wybierając dowolny profil CSV.
Hart

0

Mam ten sam problem i natknąłem się na ten dodatek, który działa doskonale w programie Excel 2013 oprócz programu Excel 2007 i 2010, o którym jest wspomniany.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.