Unicode sembollerini HTML'de görüntüleme


89

Basitçe bir HTML sayfasındaki tik (✔) ve çarpı (symbols) sembollerini göstermek istiyorum ama ya bir kutu ya da goop olarak görünüyor ✠”- açıkça kodlamayla ilgili bir şey.

Meta etiketi utf-8'i gösterecek şekilde ayarladım ama belli ki bir şeyi kaçırıyorum.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Düzenleme / Çözüm: Yapılan yorumlardan, FireBug kullanarak sayfamın ilettiği başlıkların aslında UTF-8 değil, "Content-Type: text / html" olduğunu buldum. Notepad ++ kullanarak dosya biçimine baktığımda dosyamın "BOM'suz UTF-8" olarak biçimlendirildiğini gördüm. Bunu sadece UTF-8 olarak değiştirirsek, semboller artık doğru şekilde gösteriliyor ... ancak firebug hala aynı içerik türünü gösteriyor gibi görünüyor.

Yanıtlar:


56

HTTP sunucusu başlıklarının doğru olduğundan emin olmalısınız.

Özellikle başlık:

Content-Type: text/html; charset=utf-8

mevcut olmalıdır.

Meta etiket, HTTP başlığı mevcutsa tarayıcılar tarafından yok sayılır.

Ayrıca, sunmadan önce dosyanızın gerçekten UTF-8 olarak kodlandığından emin olun, aşağıdakileri kontrol edin / deneyin:

  • Editörünüzün onu UTF-8 olarak kaydettiğinden emin olun.
  • FTP'nizin veya herhangi bir dosya aktarım programının dosyayla uğraşmadığından emin olun.
  • HTML kodlu varlıklar ile deneyin, örneğin &#uuu; .
  • Gerçekten emin olmak için, dosyanın hexdump ve karakter olarak bakın, ✔ için E2 9C 94 olmalıdır.

Not: Sisteminizin kendisi için bir glif bulamadığı bir unicode karakter kullanıyorsanız (bu karaktere sahip font yok), tarayıcınız bir soru işareti veya blok benzeri bir sembol göstermelidir. Ancak, sizin gibi birden çok Latin karakteri görürseniz, bu bir kodlama sorununa işaret eder.


Aslında meta etiket yok sayılmaz, ancak HTTP başlığı önceliklidir. Bu hassasiyet için teşekkürler Konrad.

8
contentBir CSS ::beforeseçicinin özelliğinde bir unicode karakter kullanmak için ters eğik çizgi gösteriminin kullanılması gerekeceğini unutmayın. örneğin: "& # 2713" yerine "\ 2713".
Fabien Snauwaert

18

Bir cevabın zaten kabul edildiğini biliyorum, ancak birkaç şeyi belirtmek istedim.

Ayar content-typevecharset sizin uygulama genelinde tutarlılık sağlar çünkü sunucu üzerinde yapıyor, belli ki iyi bir uygulamadır, çok daha iyidir.

Ancak, UTF-8yalnızca uygulamamın dili yalnızca karakter setinde bulunan çok sayıda karakter kullandığında kullanırım UTF-8. Durumlardan birinde bir unicode karakteri veya sembolü göstermek istiyorsanız, bunu charsetsayfanızın değiştirmeden yapabilirsiniz .

HTMLoluşturucular, sembolün içinde bahsettiğiniz sürece, sayfanın kodlama karakter kümesinin parçası olmayan sembolleri her zaman görüntüleyebilmiştir numeric character reference (NCR). Garip geliyor ama bu doğru.

Böylece, karakter kümelerinin htmlkodlamasına ansiveya herhangi birine sahip olduğunu belirten bir başlığınız olsa bile iso, html karakter referansını ondalık olarak kullanarak bir onay işareti görüntüleyebilirsiniz - & # 10003; veya onaltılık olarak - & # x2713;

Bu nedenle sayfalarınızda neden bu sorunla karşı karşıya olduğunuzu anlamak biraz zor. NCR değerinin doğru olup olmadığını kontrol edebilir misiniz, bu iyi bir referans http://www.fileformat.info/info/unicode/char/2713/index.htm


6
"Ancak, UTF-8'i yalnızca uygulamamın dili yalnızca UTF-8 karakter setinde bulunan çok sayıda karakter kullandığında kullanırım" Neden? Geçiş yapmanın dezavantajı nedir?
dumbledad

3
@dumbledad: Çok güzel bir soru, sanırım kendi önyargımın cevabımı gölgelemesine izin verdim. Demek istediğim, eğer tüm uygulamanız zaten UTF-8 değilse, tek bir sayfa için uygulama videosunu değiştirmek çok fazla iş olabilir. Ayrıca, programlama diliniz ve içeriğiniz utf-8 karakterlerine ihtiyaç duymuyorsa, editörünüzün sorun yaratmayacağı bir gereksiz karakteri yanlışlıkla kopyalayıp yapıştırabilirsiniz (utf-8 modunda olduğundan), ancak kod yürütme sırasında başarısız olacaktır. Bunu söyledikten sonra, yapabildiğiniz zaman kodlamanızı ve karakter kümenizi güncelleyin
Akshay

6

Dosyayı gerçekten UTF-8 olarak kaydettiğinizden emin olun, alternatif &#nnn;olarak özel karakterler için HTML varlıklarını ( ) kullanın .


✔ için bir HTML varlığı görünmüyor veya gözden kaçırdım mı? Dosyayı UTF-8 olarak "gerçekte" nasıl kaydedersiniz ve nasıl kontrol edebilirsiniz?
Peter Craig

@Peter: iyi bir editör kullanarak. Çoğu metin düzenleyicisinin "farklı kaydet" iletişim kutusunda dosya kodlamasını belirtme seçeneği vardır veya menülerinin bir yerinde gizli başka bir seçeneği vardır. Vim fileencodingayarı kullanır .
Konrad Rudolph

9
@Peter, koduna göre herhangi bir karaktere başvurabilirsiniz. Deneyin & # x2714; bir kene için.
Dan Dyer

utf-8 olarak kaydedin. ilginç bir kavram. statik HTML sayfaları oluşturuyorsanız iyi sonuç verir. ama ... dinamik web sayfaları ne olacak? bu unicode / utf-8 / wide karakterli şeyler benim için gerçekten oldukça kafa karıştırıcı. arka uç kodum perl. http başlığı ve html başlığı doğru şekilde ayarlanmıştır. W3C Uluslararasılaştırma Denetleyicisi, belgenin utf-8 olarak ayarlandığını onaylıyor. CaSinG önemli mi? son olarak, metin giriş kutuları ne olacak? hala goop yapıyorum! :(
Jarett Lloyd

önceki yoruma ek: veritabanım verilerin doğru girildiğini ve karakterler doğru görüntülendiğini gösteriyor. yani, veritabanı sorunu değil. benim perl betiğim (daha doğrusu düzenleyici) betikleri utf-8 olarak kaydedecek şekilde ayarlandı. sunucum, apache2, müdahale etmediğinden veya doğru ayarlandığından oldukça eminim. tüm bunlar, karakterlerin neden yapışkan olduğundan hala emin değilim. ugh. daha iyi bir yol olmalı
Jarett Lloyd

5

Nicolas tarafından önerilenin aksine, metaetiket tarayıcılar tarafından aslında göz ardı edilmez. Bununla birlikte, Content-TypeHTTP üstbilgisi her zaman birmeta belgedeki etiketin .

Bu nedenle, doğru kodlamayı HTTP başlığı aracılığıyla gönderdiğinizden veya bu HTTP başlığını hiç göndermediğinizden emin olun (önerilmez). metaEtiket esas HTTP trafiği üzerinden gönderilmez yerel dokümanlar için geri dönüş seçenektir.

HTML varlıklarını kullanmak da bir geçici çözüm olarak düşünülmelidir - bu, gerçek sorunun etrafından dolaşmaktır. Web sunucusunu doğru şekilde yapılandırmak birçok rahatsızlığı önler.


0

Bunun bir dosya sorunu olduğunu düşünüyorum, dosyanızı latin-1 gibi 1 baytlık kodlamayla kaydettiniz. Google editörünüzü ve dosyaları utf-8 olarak nasıl ayarlayacağınızı ayarlayın.

Neden utf-8'i varsayılan olarak ayarlamayan editörler olduğunu merak ediyorum.

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.