Określ kodowanie za pomocą libreoffice --convert-to csv

11

Pliki programu Excel można przekonwertować na CSV przy użyciu:

$ libreoffice --convert-to csv --headless --outdir dir file.xlsx

Wszystko wydaje się działać dobrze. Kodowanie jest jednak ustawione na coś dziwnego. Zamiast mdash UTF-8 (-), który otrzymuję, jeśli wykonam ręcznie „zapisz jako” z LibreOffice Calc, daje mi \ 227 ( ). Użycie pliku w CSV daje mi „tekst bez rozszerzonego ASCII bez ISO, z bardzo długimi liniami”. Tak więc dwa pytania:

  1. Co tu się u licha dzieje?
  2. Jak powiedzieć libreoffice, aby przekonwertował na UTF-8?

Konkretny plik, który próbuję przekonwertować, znajduje się tutaj .

Scott Deerwester
źródło

Odpowiedzi:

8

Najwyraźniej LibreOffice próbuje domyślnie użyć ISO-8859-1, co jest przyczyną problemu. W odpowiedzi na ten raport o błędach dodano nowy parametr --infilter. Poniższa komenda tworzy kreskę U + 2014 :

libreoffice  --convert-to csv --infilter=CSV:44,34,76,1 --headless --outdir dir file.xlsx

Testowałem to z LO 5.0.3.2. Ze zgłoszenia błędu wynika, że ​​najwcześniejsza wersja zawierająca tę opcję to LO 4.4.

Zobacz także: https://ask.libreoffice.org/en/question/13008/how-do-i-specify-an-input-character-coding-for-a-convert-to-command-line-usage/

Jim K.
źródło
Dzięki! Nadal nie ma sukcesu. Za pomocą tego wiersza poleceń: libreoffice --headless --convert-to csv --infilter = CSV: 44,34,76,1 file.xlsx --outdir dir; nadal ma wartość 0x97 dla kreski em. Jestem zaskoczony. Korzystam z wersji 4.2.8.2 420m0 (kompilacja: 2) na Ubuntu 14.04.
Scott Deerwester
Prawdopodobnie musisz uaktualnić do LO 4.4 lub nowszej, jak wspomniano w mojej odpowiedzi.
Jim K
1
loffice --convert-to xlsx --infilter=csv:44,34,76 input.csvpracował dla mnie. Odniesienia .
Adobe
Czy masz link, w którym infilterwymienione są te opcje? Link opublikowany przez @Adobe jest od dawna nieaktualny.
kebs
--infilterwydaje się, że chodzi o plik wejściowy i właśnie dlatego polecenie @Adobe działa (wejście CSV), a polecenie OP (wejście XLSX) nie - po prostu zgaduje
golimar
1

Możesz spróbować,

    $ libreoffice --convert-to \
    > csv:"Text - txt - csv (StarCalc)":"44,34,0,1,,0" \
    > --headless --outdir dir file.xlsx 

Tutaj masz bardzo szczegółową pomoc na temat.

xae
źródło
Dziękuję za odpowiedź. Nadal nie otrzymuję akceptacji dodatkowych tokenów. Próbowałem --convert-to "csv: Text - txt - csv (StarCalc): 44,34,76,1,, 0", --convert-to "csv: Text - txt - csv (StarCalc): 44,34,76,1,1 / 2/2/2/3/2/4/2/5/2/6/2/7/2/8/2/9/1/10/3 "i różne inne kombinacje. Jakieś sugestie?
Scott Deerwester,
csv:"Text - txt - csv (StarCalc)":"44,34,0,1,,0", csv :„podwójnie zacytowany” :„podwójnie zacytowany”
XIII
To będzie tylko względne w stosunku do powłoki, ale i tak spróbowałem z tymi samymi wynikami.
Scott Deerwester,
Oto użycie unoconvi bezpośrednio sofficedo powiązanego zadania, może może pomóc.
xae