Próbuję wprowadzić kilka znaków UTF-8 do pliku LaTeX w TextMate (który mówi, że jego domyślne kodowanie to UTF-8), ale LaTeX ich nie rozumie.
Uruchomienie cat my_file.tex
pokazuje poprawnie znaki w Terminalu. Running ls -al
pokazuje coś, czego nigdy wcześniej nie widziałem: znak „@” przy liście plików:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(I tak, używam \usepackage[utf8]{inputenc}
w LaTeX.)
Znalazłem iconv
, ale to nie wydaje się być w stanie powiedzieć mi, jakie jest kodowanie - zostanie przekonwertowane dopiero, gdy to zrozumiem.
Odpowiedzi:
Te
@
środki, że plik rozszerzył atrybuty pliku z nim związane. Możesz zapytać o nie za pomocągetxattr()
funkcji.Nie ma określonego sposobu na wykrycie kodowania pliku. Przeczytaj tę odpowiedź, wyjaśnia, dlaczego.
Jest narzędzie wiersza poleceń, enca , które próbuje odgadnąć kodowanie. Może będziesz chciał to sprawdzić.
źródło
@
to atrybuty obejmują atrybut kodowania pliku. Możesz użyć polecenia,xattr -p com.apple.TextEncoding <filename>
aby sprawdzić atrybut kodowania, jeśli istnieje.ls -l@ <filename>
aby zobaczyć, jakie atrybuty są ustawione dla pliku. Aby zobaczyć rzeczywisty atrybut, wpiszxattr -p com.apple.TextEncoding <filename>
enca
zrobićbrew install enca
i musisz określić język, ale żaden nie działa, więc:enca FILENAME -L __
Użycie opcji
-I
(to duże i) w poleceniu pliku wydaje się pokazywać kodowanie pliku.źródło
file -I *
wydaje się, że działa idealnie dla mnie (na OSX). System skarżył się na kodowanie jednego z wielu plików, nie określając, który. Wszystkie pliki były ascii, z wyjątkiem jednego, którym był utf-8. Najprawdopodobniej sprawca.W systemie Mac OS X polecenie
file -I
(duże i) poda odpowiedni zestaw znaków, o ile testowany plik zawiera znaki spoza podstawowego zakresu ASCII.Na przykład, jeśli wejdziesz do Terminala i użyjesz vi do utworzenia pliku, np.
vi test.txt
następnie wstaw kilka znaków i dołącz znak akcentowany (spróbuj ALT-e, a następnie e), a następnie zapisz plik.Piszą
file -I text.txt
i powinieneś otrzymać taki wynik:test.txt: text/plain; charset=utf-8
źródło
file
polecenie twierdzi, że jegous-ascii
alias gdzieś w mojej konfiguracji basha jako
więc po prostu piszę
Na moim waniliowym OSX Yosemite daje dokładniejsze wyniki niż "plik -I":
źródło
Możesz także konwertować z jednego typu pliku na inny za pomocą następującego polecenia:
na przykład
źródło
Po prostu użyj:
Otóż to.
źródło
file -I
dostaje mnietext/plain; charset=unknown-8bit
. Choć to działa lepiej dla pliku utf8:text/plain; charset=utf-8
.Użycie
file
polecenia z--mime-encoding
opcją (np.file --mime-encoding some_file.txt
) Zamiast opcji -I działa w systemie OS X i ma dodatkową zaletę polegającą na pomijaniu typu MIME „tekst / zwykły”, co prawdopodobnie nie jest dla Ciebie ważne.źródło
file
poleceniu. Nie wiedziałem, że istnieje. Nowicjusz. Tak czy siak. Przepraszam za głos przeciw. SO nie pozwoli mi tego cofnąć, chyba że ktoś zmieni tę odpowiedź.Klasyczny 8-bitowy LaTeX jest bardzo ograniczony, jeśli chodzi o użycie znaków UTF8; w dużym stopniu zależy od kodowania używanej czcionki i dostępnych glifów, które ta czcionka ma.
Ponieważ nie podajesz konkretnego przykładu, trudno jest dokładnie wiedzieć, gdzie jest problem - niezależnie od tego, czy próbujesz użyć glifu, którego nie ma Twoja czcionka, czy też nie używasz prawidłowego kodowania czcionki w pierwszym miejsce.
Oto minimalny przykład pokazujący, jak kilka znaków UTF8 może być używanych w dokumencie LaTeX:
Możesz mieć więcej szczęścia z kodowaniem [utf8x], ale ostrzegam, że nie jest już obsługiwane i ma pewne cechy charakterystyczne w porównaniu z [utf8] (o ile pamiętam; minęło trochę czasu, odkąd na to patrzyłem). Ale jeśli to załatwi sprawę, tylko to się liczy.
źródło
Znak @ oznacza, że plik ma rozszerzone atrybuty .
xattr file
pokazuje jakie atrybuty posiada,xattr -l file
pokazuje też wartości atrybutów (które czasami mogą być duże - spróbuj np.xattr /System/Library/Fonts/HelveLTMM
zobaczyć starodawną czcionkę, która istnieje w rozwidleniu zasobów).źródło
Wpisanie
file myfile.tex
w terminalu może czasami wskazać kodowanie i typ pliku za pomocą szeregu algorytmów i magicznych liczb. Jest to dość przydatne, ale nie licz na to, że dostarcza konkretnych lub wiarygodnych informacji.Localizable.strings
Plik (znaleziono w zlokalizowanych aplikacji Mac OS X) jest zazwyczaj być UTF-16 plik źródłowy C.źródło
Synalyze It! pozwala na porównanie tekstu lub bajtów we wszystkich kodowaniach oferowanych przez bibliotekę ICU . Korzystając z tej funkcji, zwykle od razu widać, która strona kodowa ma sens dla Twoich danych.
źródło
Możesz spróbować załadować plik do okna przeglądarki Firefox, a następnie przejść do Widok - Kodowanie znaków. Obok typu kodowania pliku powinien znajdować się znacznik wyboru.
źródło
Którego LaTeX używasz? Kiedy używałem teTeX-a, musiałem ręcznie pobrać pakiet Unicode i dodać go do moich plików .tex:
Teraz przeszedłem na XeTeX z pakietu TeXlive 2008 ( tutaj ), jest to jeszcze prostsze:
Jeśli chodzi o wykrywanie kodowania pliku, możesz się nim bawić
file(1)
(ale jest to raczej ograniczone), ale jak ktoś powiedział, jest to trudne.źródło
Brutalnym sposobem sprawdzenia kodowania może być po prostu sprawdzenie pliku w edytorze szesnastkowym lub podobnym. (lub napisz program do sprawdzenia) Spójrz na dane binarne w pliku. Format UTF-8 jest dość łatwy do rozpoznania. Wszystkie znaki ASCII to pojedyncze bajty o wartościach poniżej 128 (0x80) Sekwencje wielobajtowe są zgodne ze wzorcem przedstawionym w artykule wiki
Jeśli możesz znaleźć prostszy sposób na uzyskanie programu do weryfikacji kodowania, jest to oczywiście skrót, ale jeśli wszystko inne zawiedzie, to załatwi sprawę.
źródło
Zaimplementowałem poniższy skrypt bash, działa u mnie.
Najpierw próbuje przejść
iconv
z kodowania zwróconego przezfile --mime-encoding
doutf-8
.Jeśli to się nie powiedzie, przechodzi przez wszystkie kodowania i pokazuje różnicę między oryginalnym i ponownie zakodowanym plikiem. Pomija kodowania, które generują duży wynik różnicowy („duży” zgodnie z definicją
MAX_DIFF_LINES
zmiennej lub drugim argumentem wejściowym), ponieważ są to najprawdopodobniej nieprawidłowe kodowanie.Jeśli w wyniku użycia tego skryptu wydarzy się coś złego, nie obwiniaj mnie. Jest
rm -f
tam, więc są potwory. Próbowałem zapobiec niepożądanym efektom, używając go na plikach z losowym sufiksem, ale nie składam żadnych obietnic.Testowane na Darwin 15.6.0.
źródło