Czy istnieje aplikacja wiersza polecenia systemu Mac OS X, która może konwertować kodowanie tekstu z jednego typu na inny? (W szczególności do konwersji Mac OS Roman na utf8)

16

Chciałbym wywołać narzędzie wiersza poleceń w Mac OS X 10.8, które daje mi możliwość konwersji pliku tekstowego zapisanego w standardowym kodowaniu Roman Western Mac OS Roman na bardziej ogólny UTF-8.

Wywołam narzędzie z utworzonego przeze mnie AppleScript. AppleScript działa bardzo wolno podczas pracy z bardzo dużymi blokami tekstu. Dlatego chcę parsować i konwertować tekst przy użyciu wiersza polecenia OS X. Znalazłem narzędzie o nazwie „sed”, które pozwala mi na parsowanie tekstu. Jednak nadal istnieje wiele elementów pliku, które należy oczyścić, a znaki są wyświetlane jako śmieci, jeśli plik jest otwierany jako utf-8 (np. Inteligentne cytaty i elipsy).

Myślę, że wymuszenie konwersji kodowania tekstu może pomóc wyeliminować wszystkie znaki inne niż utf8 w pliku. Nie widzę jednak, jak „sed” może łatwo przekonwertować kodowanie tekstu.

Plik temp txt będę już zapisany jako MacRoman na dysku przy użyciu wbudowanych procedur AppleScript.

Czy ktoś z was ma jakieś pomysły na temat wbudowanego narzędzia wiersza polecenia, które może konwertować kodowanie tekstu? Wiersz poleceń dla wydajności i wbudowany, ponieważ inni użytkownicy mojego skryptu niekoniecznie mają odpowiedni zestaw narzędzi, jeśli nie jest wbudowany.

Dzięki za pomoc!

Ciemna gwiazda
źródło
Polecenie to iconv.
bmargulies
@bmargulies: Kiedy próbuję iconv na pliku zakodowanym w MacRoman i próbuję przekonwertować go na UTF-8, zamiast oryginalnych „niezwykłych znaków” pojawiają się śmieci. Na przykład elipsa zamienia się w „√Ñ√Ñ√Ñ∂∂ĘĘ√Ñ∂”. Spodziewałbym się, że elipsa z wdziękiem przekształci się w sześć okresów. Inteligentne cytaty są takie same, również przekształcają się w dziwny tekst, zamieniając się w „Ęö√Ñ√≤”. Używam składni: cat source.txt | iconv -f MacRoman -t UTF-8> iconv_test.txt Czy istnieje specjalna składnia CLI, która kazałaby iconv z wdziękiem przekonwertować cały tekst na odpowiednie zamienniki?
A jakie argumenty przekazujesz?
bmargulies
@ Darkstar - ta sama procedura działała dla mnie dobrze. Czy na pewno Twoje źródło pochodziło z MacRoman?
Tom Gewecke,
1
Excel nie powinien mieć tego problemu, powinieneś być w stanie ustawić kodowanie importu na cokolwiek chcesz, np. Patrz superuser.com/questions/280603/…
Tom Gewecke

Odpowiedzi:

8

Innym sposobem konwersji znaków spoza ASCII na warianty ASCII jest użycie iconv -t ASCII//TRANSLIT:

$ echo ‘’“”–—…äé | iconv -t ASCII//TRANSLIT
''""--..."a'e

ASCII//IGNOREusunie znaki spoza ASCII, ale możesz to również zrobić na przykład tr -dc '\0-\177'.

Lri
źródło
Czy iconvpozwolenie na Transliterate: A → A”?
Dan
@danielAzuelos Nie wiem. Sposób zastępowania znaków zależy jednak od implementacji: na przykład iconv dostarczany z Debianem zastępuje äjust a.
Lri
28

iconv jest tutaj zdecydowanie narzędziem wyboru:

iconv -f MACROMAN -t UTF-8 your-roman-encoded-file.txt > utf-8-encoded-file.txt

Uruchom, iconv --listaby zobaczyć listę wszystkich obsługiwanych kodowań.

nohillside
źródło
kiedy zorientowałem się, że to nie był MacRoman, ale „iso-8859-1”, spróbowałem ponownie. Nadal nie zrobił tego, co chciałem. Nie sądzę, że iconv może zrobić to, co chcę: z wdziękiem zastąpi wszystkie fantazyjne rozszerzone postacie standardowymi kropkami, apostrofami i podwójnymi cudzysłowami.
Darkstar