Zapisanie pliku typu CSV w programie Excel zawsze usuwa BOM

15

Próbowałem znaleźć rozsądne rozwiązanie / wyjaśnienie (bezskutecznie), aby dowiedzieć się, dlaczego Excel domyślnie usuwa BOM podczas zapisywania pliku do typu CSV.

Proszę, wybacz mi, jeśli znajdziesz kopię tego pytania. To obsługuje odczytywanie plików CSV z kodowaniem innym niż ASCII, ale nie obejmuje zapisywania pliku z powrotem (co jest największym problemem).

Oto moja obecna sytuacja (którą zamierzam zebrać jest powszechna wśród zlokalizowanego oprogramowania zajmującego się znakami Unicode i formatem CSV):

  • Eksportujemy dane do formatu CSV za pomocą UTF-16LE, upewniając się, że zestawienie komponentów jest ustawione (0xFFFE). Sprawdzamy poprawność po wygenerowaniu pliku za pomocą edytora szesnastkowego, aby upewnić się, że został ustawiony poprawnie.

  • Otwórz plik w programie Excel (w tym przykładzie eksportujemy japońskie znaki) i zobacz, że Excel obsługuje ładowanie pliku z prawidłowym kodowaniem.

  • Próby zapisania tego pliku spowoduje wyświetlenie komunikatu ostrzegawczego wskazującego, że plik może zawierać funkcje, które mogą nie być zgodne z kodowaniem Unicode, ale zapyta, czy mimo to chcesz zapisać.

  • Jeśli wybierzesz okno dialogowe Zapisz jako, natychmiast poprosi Cię o zapisanie pliku jako „Tekst Unicode”, a nie CSV. Jeśli wybierzesz rozszerzenie „CSV” i zapiszesz plik, usuwa on BOM (oczywiście wraz ze wszystkimi japońskimi znakami).

Dlaczego tak się dzieje? Czy istnieje rozwiązanie tego problemu, czy jest to znany „błąd” / ograniczenie programu Excel?

Dodatkowo (jako kwestia poboczna) wydaje się, że Excel podczas ładowania plików CSV zakodowanych w UTF-16LE używa tylko ograniczników TAB. Znowu, czy to kolejny znany „błąd” / ograniczenie programu Excel?

rickp
źródło

Odpowiedzi:

6

Nie ma uprzejmych odpowiedzi na pytania w formie „Dlaczego Excel robi X?”.

Dlaczego po prostu nie przyjmiesz opcji „Zapisz jako tekst Unicode” jako standardowego formatu transferu? Excel Save as zapewnia BOM, używa TAB jako separatora, cytuje pola tak jak CSV ...

Nawiasem mówiąc, nie „wybierasz rozszerzenia CSV”. Masz DWIE możliwości wyboru - format i rozszerzenie. Spróbuj zapisać jako tekst Unicode w polu „Zapisz jako typ” i ręcznie zmień rozszerzenie w polu „Nazwa pliku” na csv. Następnie zamknij program Excel i kliknij dwukrotnie nazwę pliku w Eksploratorze Windows. Dobrze się otwiera. Spróbuj.

Zaktualizuj, aby omówić komentarze OP :

  • „Zapisz jako tekst Unicode” (w programie Excel 2007) zawsze zapisuje plik jako rozszerzenie tekstu (nie mogę mówić o wcześniejszych lub nowszych wersjach). Taki jest pomysł „Zapisz jako typ” ...

=> Przeczytaj uważnie to, co napisałem powyżej i wypróbuj to dla siebie. Zawsze zapisuje plik z rozszerzeniem TXT, chyba że zastąpisz to : usuń pole txtw polu „Nazwa pliku” i wpisz csv.

  • Wyjaśnienie „Excel Zapisz jako upewnij się, że istnieje LM”, jest niepoprawne.

=> „Zapisz jako tekst Unicode ” zapewnia, że ​​z przodu pliku znajduje się LM UTF-16LE. Wypróbuj i przekonaj się.

  • Właśnie dlatego zadałem pytanie! Jeśli otworzę plik w formacie CSV, który zawiera BOM, aby wskazać mój plik Kodowanie to UFT-16LE i zmodyfikuję ten plik za pomocą programu Excel, spodziewam się, że po zapisaniu tego pliku kodowanie pozostanie taktowane ...

=> a Twoje oczekiwania nie są spełnione, ponieważ Excel nie przechowuje żadnych informacji o wejściowych plikach CSV. Nie ma sposobu, aby zmusić go do robienia tego, co chcesz. Więc albo poddajesz się, albo próbujesz czegoś innego, na przykład tego, co sugeruję.

  • To, co byłoby naprawdę miłe, to ktoś, kto doświadczył już tych problemów, proszę o wgląd.

=> Doświadczyłem tych problemów z chińskimi danymi i programem Excel 1997 lata temu. Przed udzieleniem odpowiedzi na twoje pytanie zweryfikowałem w programach Excel 2003 i Excel 2007, że program Excel nadal źle się zachowuje. Sprawdziłem, czy obejście „zapisz jako typ = tekst Unicode, rozszerzenie = CSV” rzeczywiście działa. Podałem swoje spostrzeżenia.

John Machin
źródło
1
„Zapisz jako tekst Unicode” (w programie Excel 2007) zawsze zapisuje plik jako rozszerzenie tekstu (nie mogę mówić o wcześniejszych lub nowszych wersjach). Taki jest pomysł „Zapisz jako typ” ... Wyjaśnienie „Zapisz Excel jako upewnij się, że jest BOM”, jest niepoprawne. Właśnie dlatego zadałem pytanie! Jeśli otworzę plik w formacie CSV, który zawiera BOM, aby wskazać mój plik Kodowanie to UFT-16LE i zmodyfikuję ten plik za pomocą programu Excel, spodziewam się, że po zapisaniu tego pliku kodowanie pozostanie taktowane ... To, co byłoby naprawdę miłe, to ktoś kto wcześniej doświadczył tych problemów, proszę podać swój wgląd.