Jak wyświetlić Unicode UTF-8 jako Unicode?


12

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:

wprowadź opis zdjęcia tutaj

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-systemi wybierz utf-8plik, 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.


Emacs nie rozpoznaje pliku jako UTF-8. Jaka jest zawartość twojego pliku init? Jaką wersję Emacsa używasz? Czy to coś zmieni, jeśli uruchomisz Emacsa za pomocą emacs -qlub emacs -Q?
Gilles „SO- przestań być zły”

Nie mam problemu z innymi plikami UTF-8. Używam GNU Emacs 24.4.4. Bez różnicy z emacs -qlub emacs -Q.
NVaughan,

Ach, jeśli to działa z innymi plikami i w nieskazitelnej konfiguracji, prawdopodobnie przyczyną jest to, że plik zawiera także gdzieś nieprawidłowy UTF-8. Pokażę, jak powiedzieć Emacsowi ...
Gilles „SO- przestań być zły”

prawdopodobnie powiązane: emacs.stackexchange.com/q/4100/2264
Sean Allred

Odpowiedzi:


10

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ąc utf-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-glyphtwarz) po ponownej interpretacji pliku jako UTF-8. Możesz wyszukać taką sekwencję, uruchamiając C-M-s( isearch-regexp) i szukając

[^^@-~[:multibyte:]]

gdzie ^@jest wprowadzane przez wpisanie C-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, ale Local Variables:i End:koniecznością wyglądają dokładnie tak jak w przypadku dwukropka końcowego):

# Local Variables:
# coding: utf-8
# End:

Emacs wybiera kodowanie, zgodnie z którym pliki są interpretowane na podstawie kilku ustawień, głównie środowisk językowych oraz zmiennych auto-coding-alisti auto-coding-regexp-alist. Ponieważ masz ten sam problem z tym plikiem, nawet gdy jest uruchomiony emacs -Q, myślę, że nie jest to problem z tymi ustawieniami, ale z zawartością pliku.


Jeśli otworzyć plik bez zmiennej plików systemu kodowania (czyli gdy plik wyświetla błędnie) i uruchomić regex wyszukiwania, cała moja \342, \200, \230itp uzyskać wybrany. Ale jeśli otworzę go „poprawnie” (przy użyciu zmiennej kodującej), wówczas nie pojawią się żadne wyniki wyszukiwania.
NVaughan,

@NVaughan Hmmm. Zatem nie rozumiem, dlaczego ten plik nie jest rozpoznawany jako UTF-8, gdy inni są (szczególnie poniżej emacs -Q).
Gilles „SO- przestań być zły”

1

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.


-1

Tylko dla systemów typu UNIX.

W wielu przypadkach bezpośrednia definicja kodowania w ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

osiągnięty z

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

w ~ / .profile powinien rozwiązać problem.

PS Po tych poprawkach musisz ponownie RELOGINOWAĆ w swojej sesji, aby zmiany stały się widoczne.


Chociaż to, co mówisz, może być przydatne, nie wydaje się, aby odpowiadało na to pytanie, ponieważ problem dotyczył tylko niektórych plików utf-8.
JeanPierre

Załóżmy, że po ścisłym zdefiniowaniu kodowania w plikach konfiguracyjnych problem ten może zniknąć dla wszystkich plików na zawsze do końca :-)
Alioth
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.