Mam niektóre pliki tekstowe zakodowane w UTF-8, które wyświetlają dziwne kody specjalne w Emacsie. Na przykład ten tekst:
In ista quaestione primo exponam quid Intelligendum est per hoc nomen „Deus”; secundo, answerebo ad quaestionem.
Tak wygląda w Emacsie:
Dzieje się tak tylko w Emacsie. Inni redaktorzy wyświetlają tekst poprawnie. Jak mogę rozwiązać ten problem?
Aktualizacja 1
Jeśli zadzwonię revert-buffer-with-coding-system
i wybierz utf-8
plik, przeczytaj poprawnie. Jak słusznie odgadł Gilles, Emacs nie wykrywa kodowania pliku. Jeśli dodam kod ; -*- coding: utf-8 -*-
do pliku, Emacs otworzy się i wyświetli poprawnie.
Aktualizacja 2
Ponownie zakodowałem plik w „UTF-8 z kodowaniem BOM”, a teraz wyświetla się dobrze w Emacsie. Nie wiem, jaka jest różnica między tymi dwoma typami, ale Emacs zdaje się być świadomy tylko BOMed.
źródło
emacs -q
lubemacs -Q
?emacs -q
lubemacs -Q
.Odpowiedzi:
Z jakiegoś powodu Emacs nie rozpoznaje pliku jako UTF-8. Możesz zmusić Emacsa do ponownego otwarcia pliku jako UTF-8, uruchamiając komendę
C-x RET r
(revert-buffer-with-coding-system
) i wprowadzającutf-8
.Powodem, dla którego Emacs nie rozpoznał tego pliku jako UTF-8 (ale rozpoznaje inne), jest prawdopodobne, że zawiera on nieprawidłową sekwencję UTF-8. Ta sekwencja nadal będzie wyświetlana jako ukośnik odwrotny, po której następują trzy cyfry ósemkowe o innym kolorze (
escape-glyph
twarz) po ponownej interpretacji pliku jako UTF-8. Możesz wyszukać taką sekwencję, uruchamiającC-M-s
(isearch-regexp
) i szukającgdzie
^@
jest wprowadzane przez wpisanieC-q C-SPC
(jest to znak ^ @ = 0, a nie dwuznakowa sekwencja circumflex-at; znak przed nim jest znakiem otaczającym).Można wymusić Emacs rozpoznać plik jako UTF-8 przez dodanie kodowania zmiennej pliku systemowego : umieścić coś takiego
-*-coding: utf-8-*-
na pierwszej linii, lub umieścić coś takiego pod koniec pliku (można zastąpić#
dowolnym prefiksem, aleLocal Variables:
iEnd:
koniecznością wyglądają dokładnie tak jak w przypadku dwukropka końcowego):Emacs wybiera kodowanie, zgodnie z którym pliki są interpretowane na podstawie kilku ustawień, głównie środowisk językowych oraz zmiennych
auto-coding-alist
iauto-coding-regexp-alist
. Ponieważ masz ten sam problem z tym plikiem, nawet gdy jest uruchomionyemacs -Q
, myślę, że nie jest to problem z tymi ustawieniami, ale z zawartością pliku.źródło
\342
,\200
,\230
itp uzyskać wybrany. Ale jeśli otworzę go „poprawnie” (przy użyciu zmiennej kodującej), wówczas nie pojawią się żadne wyniki wyszukiwania.emacs -Q
).Późno jest odpowiedzieć na pytanie dotyczące BOM, ale i tak to zrobię.
Znak kolejności bajtów (BOM) to ciąg trzech bajtów \ xef \ xbb \ xbf, który na początku pliku wskazuje systemom i aplikacjom, że zawartość jest zakodowana jako UTF-8. Właściwie są to metadane, które nie są traktowane jako część treści.
Większość aplikacji - Emacs jest jedną z nich - honoruje BOM i zapisuje za nim wszystkie pliki UTF-8. Inne aplikacje mogą to docenić podczas czytania, ale nie napisać; a inni nie wiedzą o tym i mogą rzucić komunikat o błędzie, gdy go napotkają. Innymi słowy, sytuacja jest chaotyczna. Wolę go używać wszędzie tam, gdzie to możliwe.
źródło
Tylko dla systemów typu UNIX.
W wielu przypadkach bezpośrednia definicja kodowania w ~ / .bashrc ~ / bash_profile
osiągnięty z
w ~ / .profile powinien rozwiązać problem.
PS Po tych poprawkach musisz ponownie RELOGINOWAĆ w swojej sesji, aby zmiany stały się widoczne.
źródło