Czy można wymusić Automatyczne rozpoznawanie plików CSV UTF-8 w Excelu?

Rozwijam część aplikacji, która odpowiada za eksport niektórych danych do plików CSV. Aplikacja zawsze używa UTF-8 ze względu na swój wielojęzyczny charakter na wszystkich poziomach. Jednak otwieranie takich plików CSV (zawierających np. znaki diakrytyczne, cyrylicę, litery greckie) w Excelu nie daje oczekiwanych rezultatów pokazując coś w rodzaju Г„/Г¤, Г–/Г¶. I nie wiem jak wymusić Excela rozumiem, że otwarty plik CSV jest zakodowany w UTF-8. Próbowałem też podać UTF-8 BOM EF BB BF, ale Excel ignoruje to.

Czy jest jakieś obejście?

P. S. które narzędzia mogą potencjalnie zachowywać się jak Excel?


UPDATE

Muszę powiedzieć, że pomyliłem społeczność z formułowaniem pytania. Kiedy zadałem to pytanie, zapytałem o sposób otwarcia pliku UTF-8 CSV w Excelu bez żadnych problemów dla użytkownika, w sposób płynny i przejrzysty. Jednak użyłem niewłaściwego sformułowania prosząc o zrobienie tego automatycznie . To bardzo mylące i koliduje z automatyzacją makr VBA. Są dwie odpowiedzi na te pytania, które cenię najbardziej: pierwsza odpowiedź Alex https://stackoverflow.com/a/6002338/166589 , a ja zaakceptowałem tę odpowiedź; a druga przez Marka https://stackoverflow.com/a/6488070/166589 które pojawiły się nieco później. Z punktu widzenia użyteczności, Excel zdawał się nie mieć dobrej przyjaznej dla użytkownika obsługi UTF-8 CSV, więc uważam, że obie Odpowiedzi są poprawne, a ja najpierw zaakceptowałem odpowiedź Alexa, bo tak naprawdę stwierdziłem, że Excel nie był w stanie tego zrobić. To jest to, co pomyliłem z automatycznie tutaj. Odpowiedź Marka promuje bardziej skomplikowany sposób dla bardziej zaawansowanych użytkowników, aby osiągnąć oczekiwany wynik. Obie odpowiedzi są świetne, ale ta Alex pasuje do mojego Nie sprecyzowanego pytania trochę lepiej.

UPDATE 2

Pięć miesięcy później po ostatniej edycji zauważyłem, że odpowiedź Alexa ma zniknął z jakiegoś powodu. Mam nadzieję, że to nie był problem techniczny i mam nadzieję, że nie będzie więcej dyskusji na temat tego, która odpowiedź jest teraz większa. Więc uznaję odpowiedź Marka za najlepszą.

Author: Community, 2011-05-14

24 answers

Alex ma rację, ale ponieważ musisz eksportować do csv, możesz dać użytkownikom tę radę podczas otwierania plików csv:

  1. Zapisz wyeksportowany plik jako plik csv
  2. Otwórz Excel
  3. Importuj dane za pomocą Data-- > Importuj dane zewnętrzne -- > Importuj dane
  4. Wybierz typ pliku " csv " i przejdź do swojego pliku
  5. w Kreatorze importu Zmień File_Origin na "65001 UTF" (lub wybierz poprawny identyfikator znaków języka)
  6. Zmień ogranicznik na przecinek
  7. Wybierz miejsce importowania i zakończenia

W ten sposób znaki specjalne powinny być poprawnie wyświetlane.

 327
Author: Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-27 13:38:04

Znacznik kolejności bajtów UTF-8 wskaże Excel 2007+ na fakt, że używasz UTF-8. (Patrz this so post ).

W przypadku, gdy ktoś ma te same problemy, co ja, Klasa kodowania. NET UTF8 nie wyświetla znacznika kolejności bajtów, nawet jeśli jego konstruktor jest wyraźnie o tym poinformowany. Musisz użyć tego obejścia, jeśli chcesz naprawdę zapisać go ze znacznikiem kolejności bajtów.

 116
Author: StriplingWarrior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:37

Błąd z ignorowanym BOM wydaje się być naprawiony dla Excela 2013. Miałem ten sam problem z cyrylicą, ale dodanie znaku BOM \uFEFF pomogło.

 58
Author: sshturma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-26 07:52:21

To niesamowite, że jest tak wiele odpowiedzi, ale żadna nie odpowiada na pytanie:

" kiedy zadałem to pytanie, zapytałem o sposób otwarcia UTF-8 Plik CSV w Excelu bez żadnych problemów dla użytkownika,..."

Odpowiedź oznaczona jako zaakceptowana odpowiedź z 200 + głosami w górę jest dla mnie bezużyteczna, ponieważ nie chcę dawać moim użytkownikom instrukcji, jak skonfigurować Excela. Poza tym: ten podręcznik będzie miał zastosowanie do jednej wersji programu Excel, ale inne wersje programu Excel mają różne menu i okna dialogowe konfiguracji. Do każdej wersji programu Excel potrzebny będzie podręcznik.

Więc pytanie brzmi, jak sprawić, by Excel wyświetlał dane UTF8 za pomocą prostego podwójnego kliknięcia?

Przynajmniej w Excelu 2007 nie jest to możliwe, jeśli używasz plików CSV, ponieważ BOM UTF8 jest ignorowany i zobaczysz tylko śmieci. Jest to już część pytania Lyubomyra Shaydariva:

"próbowałem też podać UTF-8 BOM EF BB BF, ale Excel ignoruje to."

Robię to samo doświadczenie: zapisywanie rosyjskich lub greckich danych do pliku UTF8 CSV z BOM powoduje śmieci w Excelu:

Zawartość pliku UTF8 CSV:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

Wynik w Excelu 2007:

CSV UTF8 Excel

Rozwiązaniem jest nie używać CSV w ogóle. Format ten jest tak głupio zaimplementowany przez Microsoft, że zależy od ustawień regionu w panelu sterowania Jeśli przecineklub średnik jest używany jako separator. Więc ten sam plik CSV może otworzyć się poprawnie na jednym komputerze, ale na innym nie. "CSV " oznacza" wartości rozdzielone przecinkiem ", ale na przykład w niemieckim systemie Windows domyślnie średnik musi być użyty jako separator, podczas gdy przecinek nie działa. Pliki CSV nie mogą być wymieniane między różnymi wersjami językowymi systemu Windows. Jest to dodatkowy Problem do problemu UTF-8.

Excel istnieje od dziesięcioleci. Szkoda, że Microsoft przez te wszystkie lata nie był w stanie zaimplementować tak podstawowej rzeczy, jak import CSV.

Jeśli umieścisz te same wartości w pliku HTML i zapiszesz ten plik jako plik UTF8 z BOM z rozszerzeniem XLS otrzymasz poprawny wynik.

Zawartość pliku XLS UTF8:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

Wynik w Excelu 2007:

UTF8 HTML Excel

Możesz nawet używać kolorów w HTML, które Excel wyświetli poprawnie.

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

Wynik w Excelu 2007:

UTF8 HTML Excel

W tym przypadku tylko sama tabela ma czarną obwódkę i linie. Jeśli chcesz, aby wszystkie komórki wyświetlały linie siatki, jest to również możliwe w HTML:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

Ten kod pozwala nawet określić nazwę arkusza roboczego (tutaj "MySuperSheet")

Wynik w Excelu 2007:

Tutaj wpisz opis obrazka

 31
Author: Elmue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-17 22:01:56

Zastosowaliśmy to obejście:

  1. Konwertuj CSV na UTF-16
  2. Wstaw BOM na początku pliku
  3. użyj zakładki jako separatora pól
 29
Author: e-zinc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 19:17:48

Miał te same problemy z plikami CSV generowanymi przez PHP. Excel zignorował BOM, gdy Separator został zdefiniowany przez "sep=,\n" na początku zawartości (ale oczywiście po BOM).

Więc dodanie BOM ("\xEF\xBB\xBF") na początku zawartości i ustawienie średnika jako separatora za pomocą fputcsv($fh, $data_array, ";"); załatwia sprawę.

 17
Author: Ixtlilton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-26 09:18:01

Miałem ten sam problem w przeszłości (jak tworzyć pliki, które Excel może odczytać, a inne narzędzia mogą również odczytać). Używałem TSV zamiast CSV, ale pojawił się ten sam problem z kodowaniem.

Nie udało mi się znaleźć żadnego sposobu, aby Excel rozpoznał UTF-8 automatycznie, i nie byłem skłonny/w stanie zadać konsumentom plików skomplikowanych instrukcji, jak je otworzyć. Więc zakodowałem je jako UTF-16LE (z BOM) zamiast UTF-8. Dwa razy większy, ale Excel potrafi rozpoznać kodowanie. I dobrze się kompresują, więc rozmiar rzadko (ale niestety nie nigdy) ma znaczenie.

 9
Author: Steve Jessop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-09 09:18:26

Stare pytanie, ale do licha, najprostszym rozwiązaniem jest:

  1. Otwórz plik CSV w Notatniku
  2. Zapisz jako - > wybierz właściwe kodowanie
  3. Otwórz nowy plik
 9
Author: Aki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-29 13:39:49

Jak napisałem na http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html:

Powiedz programiście odpowiedzialnemu za generowanie pliku CSV, aby go skorygował. Jako szybkie obejście można użyć gsed, aby wstawić BOM UTF-8 na początku łańcucha:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

To polecenie wstawia BOM UTF-4, jeśli go nie ma. Dlatego jest to polecenie idempotentne. Teraz powinieneś być w stanie dwukrotnie kliknąć plik i otworzyć go w programie Excel.

 4
Author: Nestor Urquiza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 17:40:49

To jest stare pytanie, ale pojawia się w wyszukiwaniu na górze. Po wielu wysiłkach odkryłem, że dodawanie znaków BOM na początku pliku csv pomaga.

Przedstawiłem to tutaj: https://sites.google.com/site/ritechtips/home/the-multi-line-fields-csv-file-and-excel-import---ha{[4]

 3
Author: Found-it-finally,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 19:18:01

Proste makro vba do otwierania plików tekstowych utf - 8 i csv

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

Pochodzenie: = 65001 to UTF-8. Przecinek: True for .pliki csv dystrybuowane w colums

Zachowaj to dla siebie.xlsb, aby było zawsze dostępne. Spersonalizuj pasek narzędzi programu excel dodając przycisk wywołania makra i otwierając stamtąd pliki. Możesz dodać więcej formatowania do makra, takich jak autofit kolumn,wyrównanie itp.
 2
Author: alc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-19 15:02:40

Tylko po to, aby pomóc użytkownikom zainteresowanym otwarciem pliku w Excelu, którzy osiągną ten wątek tak jak ja.

Użyłem poniższego kreatora i zadziałało mi dobrze, importując plik UTF-8. Nie przezroczysty, ale przydatny, jeśli masz już plik.

  1. Otwórz Microsoft Excel 2007.
  2. Kliknij na pasku Menu Data.
  3. Kliknij ikonę z tekstu.
  4. przejdź do lokalizacji pliku, który chcesz zaimportować. Kliknij na nazwę pliku, a następnie kliknij na Przycisk importu. Kreator importu tekstu-Krok 1 lub 3 pojawi się teraz na ekranie.
  5. Wybierz typ pliku, który najlepiej opisuje dane-rozdzielana lub Stała szerokość.
  6. Wybierz 65001: Unicode (UTF-8) z rozwijanej listy, która pojawi się obok miejsca pochodzenia pliku.
  7. Kliknij przycisk Dalej, aby wyświetlić Kreator importu tekstu-Krok 2 lub 3 okno.
  8. umieść znacznik wyboru obok ogranicznika używanego w pliku, który chcesz zaimportować do programu Microsoft Excel 2007. Na Okno podglądu danych pokaże, w jaki sposób dane będą wyświetlane na podstawie wybranego ogranicznika.
  9. Kliknij przycisk Dalej, aby wyświetlić Kreator importu tekstu-Krok 3 z 3.
  10. Wybierz odpowiedni format danych dla każdej kolumny danych, które chcesz zaimportować. Możesz również nie importować jednej lub więcej kolumn danych, jeśli chcesz.
  11. Kliknij przycisk Zakończ, aby zakończyć importowanie danych do programu Microsoft Excel 2007.

Źródło: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0

 2
Author: Wagner Bertolini Junior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-13 14:38:25

Naprawdę niesamowita lista odpowiedzi, ale ponieważ jeden całkiem dobry jeden nadal brakuje, wspomnę o tym tutaj: otwórz plik csv z Arkusze google{[2] } i zapisać go z powrotem do lokalnego komputera jako plik excel.

W przeciwieństwie do Microsoft, Google udało się obsługiwać pliki UTF-8 csv, więc po prostu działa, aby otworzyć plik tam. Eksport do formatu excel również działa. Więc nawet jeśli nie jest to preferowane rozwiązanie dla wszystkich, to jest dość bezpieczne i liczba kliknięć nie jest tak wysoka, jak może się wydawać, zwłaszcza, gdy jesteś już zalogowany w google i tak.

 2
Author: Christoph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-08 19:26:20

To jest moje rozwiązanie robocze:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

Kluczem Jest pochodzenie:=65001

 1
Author: Nobilis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-18 09:49:47

Tak, to możliwe. Podczas pisania strumienia tworzącego plik csv, pierwszą rzeczą do zrobienia jest to:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)
 1
Author: zax,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-28 21:18:08

Tak, to możliwe. Jak wcześniej zauważyło wielu użytkowników, wydaje się, że występuje problem z odczytaniem przez program excel prawidłowej kolejności bajtów, gdy plik jest zakodowany w UTF-8. Z UTF-16 nie wydaje się mieć problemu, więc jest endemiczny dla UTF-8. Rozwiązaniem, którego używam do tego, jest dodanie BOM, dwa razy. W tym celu wykonuję dwa razy następujące polecenie sed:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, gdzie symbol wieloznaczny może być zastąpiony dowolną nazwą pliku. Jednak prowadzi to do mutacji Sep= na początku z....plik csv. The .plik csv otworzy się normalnie w Excelu, ale z dodatkowym wierszem z "sep=" w pierwszej komórce. "Sep=" można również usunąć w źródle .sam plik csv, ale przy otwieraniu pliku z VBA powinien być podany ogranicznik:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

Format 6 toformat csv. Ustaw Local na true, w przypadku, gdy w pliku są daty. Jeśli Local nie jest ustawiony na true, daty zostaną zmienione, co w niektórych przypadkach spowoduje uszkodzenie .format csv.

 1
Author: TheCharlatan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-05 10:08:40

To nie jest dokładne rozwiązanie pytania, ale ponieważ natknąłem się na to i powyższe rozwiązania nie działały dla mnie lub miały wymagania, których nie mogłem spełnić, oto inny sposób na dodanie BOM, gdy masz dostęp do Vima:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv
 1
Author: CannedMoose,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 17:10:03

Jest rok 2018, a ja pochodzę z przyszłości.

Aby otworzyć plik tylko dwukrotnym kliknięciem, które pokazuje prawidłowe znaki, otwórz plik w notepad++ i wybierz kodowanie - > UTF-8-BOM i naciśnij Zapisz.

 1
Author: Christopher Adi Pascual,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-20 08:15:40

To jest stare pytanie, ale właśnie spotkałem się z podobnym problemem i rozwiązanie może pomóc innym:

Miał ten sam problem, gdy zapisywanie danych tekstowych CSV do pliku, a następnie otwieranie wynikowych .plik csv w programie Excel przenosi cały tekst do jednej kolumny. Po przeczytaniu powyższych odpowiedzi wypróbowałem następujące, które wydają się rozwiązywać problem.

Zastosuj kodowanie UTF-8 podczas tworzenia Streamwritera. To wszystko.

Przykład:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}
 0
Author: Rex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-25 13:41:02

Jeśli chcesz uczynić go w pełni automatycznym, jednym kliknięciem lub załadować automatycznie do Excela ze strony internetowej, ale nie możesz wygenerować odpowiednich plików Excela, sugerowałbym spojrzenie na format SYLK jako alternatywę. OK nie jest tak prosty jak CSV, ale jest oparty na tekście i bardzo łatwy w implementacji i obsługuje UTF-8 bez żadnych problemów.

Napisałem klasę PHP, która odbiera dane i wysyła plik SYLK, który otworzy się bezpośrednio w Excelu, klikając plik (lub automatycznie uruchomi Excel, jeśli plik zostanie zapisany na stronie internetowej z prawidłowym typem mime. Możesz nawet dodać formatowanie (jak pogrubienie, Formatowanie liczb w poszczególnych sposobach itp.) I zmienić rozmiary kolumn, lub kolumny auto rozmiar do tekstu w kolumnach i w sumie kod jest prawdopodobnie nie więcej niż około 100 linii.

Jest to bardzo łatwe do inżynierii wstecznej SYLK poprzez stworzenie prostego arkusza kalkulacyjnego i zapisanie jako SYLK, a następnie odczytanie go za pomocą edytora tekstu. Pierwszy blok to nagłówki i standardowe formaty liczb, które rozpoznaje (które po prostu zwracasz w każdym utworzonym pliku), a następnie dane są po prostu współrzędną X/Y i wartością.

 0
Author: Cloudranger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 10:16:02
  1. Pobierz i zainstaluj LibreOffice Calc
  2. Otwórz wybrany plik csv w LibreOffice Calc
  3. dzięki niebiosom, że pojawia się Kreator importu tekstu...
  4. ...wybierz opcje ogranicznika i kodowania znaków
  5. Wybierz dane wynikowe w Calc i skopiuj wklej do Excela
 0
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 02:40:36

Generuję pliki csv z prostej aplikacji C# i miałem ten sam problem. Moim rozwiązaniem było upewnienie się, że plik jest zapisany z kodowaniem UTF8, TAK:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

Początkowo miałem następujący kod, z którym akcenty wyglądają dobrze w Notepad++, ale były zniekształcone w Excelu:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

Twój przebieg może się różnić - używam. NET 4 i Excel z Office 365.

 0
Author: yoyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 21:21:00

Cześć używam ruby on rails do generowania csv. W naszej aplikacji planujemy przejść do wielu języków (I18n) i napotkaliśmy problem podczas przeglądania zawartości I18n w pliku CSV systemu Windows excel.

Był w porządku z Linuksem (Ubuntu) i mac.

Zidentyfikowaliśmy, że program Windows excel musi zostać ponownie zaimportowany, aby wyświetlić rzeczywiste dane. Podczas importu otrzymamy więcej opcji wyboru zestawu znaków.

Ale to nie może być wykształcone dla każdego użytkownika, więc rozwiązanie My Szukam jest otworzyć po prostu przez podwójne kliknięcie.

Następnie zidentyfikowaliśmy sposób wyświetlania danych w trybie otwartym i bom w windows excel za pomocą aghuddleston gist. Dodano w odnośniku.

Przykład I18n content

W Mac i Linux

Szwedzki: Förnamn Angielski: Imię

W Windows

Szwedzki: Förnamn Angielski: Imię

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

Ważne rzeczy, na które należy zwrócić uwagę to tryb otwarty i bom

Open_mode = "w+: UTF-16LE: UTF-8"

Bom = "\xEF\xBB\xBF "

Przed napisaniem CSV Wstaw BOM

F. napisz bom

F. write (csv_file)

Windows i Mac

Plik można otworzyć bezpośrednio poprzez podwójne kliknięcie.

Linux (ubuntu)

Podczas otwierania pliku zapytaj o opcje separatora - > wybierz " TAB" Tutaj wpisz opis obrazka

 0
Author: praaveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-15 12:27:24

Najpierw zapisz arkusz kalkulacyjny Excel jako tekst Unicode. Otwórz plik TXT za pomocą Internet Explorera i kliknij" Zapisz jako " kodowanie TXT-wybierz odpowiednie kodowanie, np. dla Win Cyrylica 1251

 -1
Author: Bragabondio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-06 20:59:19