Unicode UTF-8 nasıl Unicode olarak görüntülenir?


12

Emacs garip kaçış kodları görüntüler bazı UTF-8 kodlu metin dosyaları var. Örneğin, bu metin:

İsta quaestione primo exponam'da hoc nomen 'Deus' için intelligendum est quid; secundo, answerebo reklam quaestionem.

Emacs'ta şöyle gösterilir:

resim açıklamasını buraya girin

Bu sadece Emacs'ta olur. Diğer editörler metni doğru gösterir. Bu sorunu nasıl düzeltebilirim?


Güncelleme 1

Dosyayı arar revert-buffer-with-coding-systemve utf-8seçersem doğru bir şekilde okunur. Dolayısıyla, Gilles'in doğru tahmin ettiği gibi, Emacs dosya kodlamasını algılamıyor. Kodu ; -*- coding: utf-8 -*-dosyaya eklersem Emacs açılır ve doğru şekilde görüntüler.


Güncelleme 2

Dosyayı "BOM kodlamalı UTF-8" olarak yeniden kodladım ve şimdi Emacs'ta iyi görünüyor. İki tür arasındaki farkın ne olduğunu bilmiyorum, ancak Emacs sadece BOMed'in farkında.


Emacs dosyayı UTF-8 olarak tanımıyor. İnit dosyanızın içeriği nedir? Hangi Emacs sürümünü kullanıyorsunuz? Emacs'ı emacs -qveya ile başlatırsanız herhangi bir değişiklik olur emacs -Qmu?
Gilles 'SO- kötü olmayı bırak'

Diğer UTF-8 dosyalarıyla sorunum yok. GNU Emacs 24.4.4 kullanıyorum. emacs -qVeya ile fark yok emacs -Q.
NVaughan

Ah, diğer dosyalarla ve bozulmamış bir yapılandırmada çalışıyorsa, bunun nedeni muhtemelen dosyanın bir yerde geçersiz UTF-8 içermesidir. Bakalım Emacs ile nasıl söyleyeyim ...
Gilles 'SO- kötü olmayı bırak'

Yanıtlar:


10

Nedense Emacs dosyayı UTF-8 olarak tanımıyor. Emacs komutunu C-x RET r( revert-buffer-with-coding-system) çalıştırarak ve girerek dosyayı UTF-8 olarak yeniden açmaya zorlayabilirsiniz utf-8.

Emacs'ın bu dosyayı UTF-8 olarak tanımamasının (ancak diğerini tanıdığı) nedeni, geçersiz bir UTF-8 dizisi içermesidir. Bu sıra escape-glyph, dosyayı ters eğik çizgi ve ardından UTF-8 olarak yeniden yorumladıktan sonra farklı bir renkte ( yüz) üç sekizli basamak olarak görünecektir . Böyle bir diziyi C-M-s( isearch-regexp) çalıştırarak ve arayarak arayabilirsiniz .

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

nereye ^@yazarak girilir C-q C-SPC(iki karakter dizisi circumflex-at değil, ^ @ = 0 karakteri; inceltme işaretinden önceki karakter).

Bir ekleyerek UTF-8 olarak dosyayı tanıyan emacs'in zorlayabilir kodlama sistemi dosya değişkeni : koymak gibi bir şey -*-coding: utf-8-*-böyle ilk satırda veya koymak şey dosyasının sonuna yakın (siz değiştirebilirsiniz #herhangi bir önek ile değil Local Variables:ve End:zorunluluk tam olarak iki nokta üst üste işareti ile böyle görünür):

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

Emacs dosyaları yorumlanır Buna göre kodlama seçer birkaç ayarlarında, öncelikle dayalı dil ortamlar ve değişkenlerin auto-coding-alistve auto-coding-regexp-alist. Çalışırken bile bu dosyada aynı sorunla karşılaştığınızdan emacs -Q, bunun bu ayarlarla değil, dosya içeriğiyle ilgili bir sorun olduğunu düşünüyorum.


Ben kodlama sistemi dosyası değişkeni olmadan dosya açarsanız (dosya yanlış görüntüler yani zaman) ve regex arayacaksınız, benim tüm \342, \200, \230vb seçili olsun. Ancak "doğru" (kodlama değişkenini kullanarak) açarsam, arama sonuçları görünmez.
NVaughan

@NVaughan Hmmm. O zaman diğerleri (özellikle altında emacs -Q) olduğunda bu dosya neden UTF-8 olarak tanınmıyor anlamıyorum .
Gilles 'SO- kötü olmayı bırak'

1

Malzeme Listesiyle ilgili soruyu cevaplamak için geç, ama yine de yapacağım.

Bayt sırası işareti (BOM), bir dosyanın başlangıcında, içeriğin UTF-8 olarak kodlandığı sistemleri ve uygulamaları gösteren üç baytlık \ xef \ xbb \ xbf dizisidir. Düzgün olarak meta verilerdir, içeriğin bir parçası olarak ele alınmaz.

Çoğu uygulama - Emacs bunlardan biridir - Malzeme Listesini onurlandırır ve tüm UTF-8 dosyalarını onunla yazar. Diğer uygulamalar onu okumada onurlandırabilir, ancak yazamaz; ve diğerleri bunu bilmiyorlar ve karşılaştıklarında bir hata mesajı atabiliyorlar. Başka bir deyişle, durum dağınık. Mümkün olan yerlerde kullanmayı tercih ederim.


-1

Yalnızca UNIX benzeri sistemler için.

Çoğu durumda ~ / .bashrc ~ / bash_profile içindeki basit kodlama tanımı

LANG=en_EN.UTF8

ile başarıldı

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

~ / .profile sorununuzu çözmelidir.

Not: Bu düzeltmelerden sonra, değişikliklerin görünür hale gelmesi için oturumunuzda RELOGIN yazmanız gerekir.


Söyledikleriniz yararlı olabilir, bu sorun sadece bazı utf-8 dosyalarıyla olduğu için bu soruya cevap vermiyor gibi görünüyor .
JeanPierre

Konfigürasyonda sıkı kodlama tanımı dosyaları sonra bu sorun ortadan olabileceğini varsayalım tüm dosyalar sonsuza :-) Hiç son
Alioth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.