SORU
11 ŞUBAT 2010, PERŞEMBE


Unicode, UTF-8,-16 UTF nedir?

Unicode temeli nedir ve neden UTF-8 veya UTF-16 için ihtiyacınız var? Google'da bunu araştırdım ve burada aranan iyi ama benim için net değil.

Dosya karşılaştırma yaparken VSS, bazen mesaj iki dosya UTF farklı söylüyor. Neden bu durumda olurdu?

Basit açısından açıklayınız.

CEVAP
28 ŞUBAT 2013, PERŞEMBE


Unicode neden ihtiyacımız var?

() İlk günlerde, var olan tüm ASCII oldu. Bu, şimdiye kadar gerekli tüm denetim karakterleri, noktalama işaretleri, rakamlar ve bu cümlede olanlar gibi harfleri olduğu gibi yolunda. Ne yazık ki, bugün bu garip dünyanın küresel haberleşme ve sosyal medya değildi öngörülen, ve çok sıradışı görmek İngilizce, Arapça, 汉语, עִבְרִית, Yunan ve ភាសាខ្មែរ aynı belge (umarım ben yapmadım amca, eski tarayıcılar).

Ama tartışmanın hatırına, hadi Joe Ortalama bir yazılım geliştiricisi olduğunu söylüyorlar. Şimdiye kadar sadece İngilizce ihtiyacı olacak ısrar ediyor, ve bu sadece ASCII kullanmak istiyor. Bu Joe için iyi olabilirkullanıcıama bu Joe için iyi değilyazılım geliştirici. Yaklaşık dünyanın yarısı olmayan Latin karakterleri kullanan ve ASCII kullanarak bu insanlar için belki düşüncesiz ve bunun üzerine, büyük ve büyüyen bir ekonomi için kendi yazılım kapanış.

Bu nedenle, her şeyi kapsayan bir karakter de dahil olmak üzere ayarlayıntümdil gereklidir. Böylece Unicode geldi. Benzersiz bir numara aradı her karakter atarkod noktası. Diğer olası ayarlar üzerinde Unicode bir avantajı ilk 256 kod noktaları ISO-8859-1 ve dolayısıyla da ASCII aynıdır. Buna ek olarak, sık kullanılan karakterler büyük çoğunluğu bir bölge Basic Multilingual Plane (BMP) adlı sadece iki bayt olarak gösterilebilir. Şimdi bir karakter kodlaması bu karakter kümesi erişmek için gerekli değildir, ve soru sorar gibi, UTF-8 ve UTF-16 üzerinde yoğunlaşacağım.

Bellek hususlar

Kaç bayt bu kodlamalar ne karakterler için erişim vermek?

  • UTF-8:
    • 1 byte: Standart ASCII
    • 2 bayt: Arapça, İbranice, çoğu Avrupa komut dosyaları (özellikle Georgian hariç)
    • 3 bayt: BMP
    • 4 bayt: Tüm Unicode karakterleri
  • UTF-16:
    • 2 bayt: BMP
    • 4 bayt: Tüm Unicode karakterleri

BMP değil karakter eski komut, matematiksel semboller, müzik sembolleri ve Chinese/Japanese/Korean (CJK) nadir karakterler vardır söz etmek gerekiyor.

Eğer çoğunlukla ASCII karakterler ile çalışacaksın, sonra UTF-8 kesinlikle daha verimli bellek. Eğer çoğunlukla Avrupalı olmayan komut ile çalışıyorsanız ancak, UTF-8 kullanarak 1,5 kat daha az bellek UTF-16 daha verimli olabilir. Web sayfaları ya da uzun word belgeleri büyük gibi metin büyük miktarlarda ile uğraşırken, bu performansını etkileyebilir.

Kodlama temelleri

Not: Eğer UTF-8 ve UTF-16 kodlanmış nasıl biliyorsanız, pratik uygulamalar için bir sonraki bölüme geçin.

  • UTF-8:Standart ASCII (0-127) karakter için UTF-8 kodları aynıdır. Bu UTF-8 ideal geriye doğru uyumluluk mevcut ASCII metin ile gerekli kılar. Diğer karakterler her yerde 2-4 bayt gerektirir. Bu multi-byte karakter bir parçası olduğunu göstermek için bu bayt her bazı bit ayırma ile yapılır. Özellikle, her bayt ilk bit 1 ASCII karakterler ile çatışan önlemek için.
  • UTF-16:Geçerli BMP karakterler için UTF-16 temsil sadece kod noktası. Ancak, non-BMP karakterler için UTF-16 tanıttıyedek çifti. Bu durumda iki iki baytlık bölümleri bir arada olmayan BMP bir karakter göster. İki baytlık Bölümleri bu BMP sayısal gelir aralığı, ama BMP karakter olarak geçersiz Unicode standardı tarafından garanti altına alınmıştır. UTF-16 temel ünite olarak iki bayt vardır beri ayrıca, endianness etkilenir. Telafi etmek için, bir saklıdırbayt sırası işaretiendianness gösteren bir veri akışı başında yerleştirilebilir. UTF-16 giriş okuma ve endianness belirtilirse, bu nedenle, bunun için kontrol etmelisiniz.

Görüldüğü gibi, UTF-8 ve UTF-16 yere birbirlerine yakın uyumlu. Eğer yapıyorsan I/O yüzden, kullandığınız hangi bildiğinizden emin olun! Bu kodlamalar hakkında daha detaylı bilgi için, lütfen UTF FAQ bkz.

Pratik programlama konuları

Karakter ve String veri türleri:Nasıl programlama dili ile kodlanmış? Eğer ham bayt, çıkış çalışın dakikada ASCII olmayan karakterler varsa, birkaç sorunlarla çalıştırabilir. Eğer karakter türü UTF dayalı olsa da, bu dizeleri UTF uygun olduğu anlamına gelmez. Geçersiz bayt dizileri verebilir. Genel olarak, UTF, ICU gibi destekleyen bir kütüphane kullanmak için C, C ve Java için var. Eğer/çıkış varsayılan kodlama dışında giriş yapmak istiyorsanız, herhangi bir durumda, önce onu dönüştürmek zorunda kalacak.

Önerilen varsayılan/baskın kodlamaları/:Hangi kullanmak için UTF bir seçim verildiğinde, genellikle en iyi iş ortamı için önerilen standartları takip etmek önemlidir. Örneğin, UTF-8 HTML5, recommended encoding beri web üzerinde baskın. Tersine, her ikisi de .NET ve Java ortamlarında UTF-16 karakter türü üzerine kurulmuştur. Şaşırtıcı bir biçimde (ve yanlış), başvurular sık sık yapılan "Unicode kodlama genellikle belirli bir ortamda kodlama. baskın UTF ifade eder",

Destek kitaplığı:Kodlamaları desteği kullandığınız kütüphaneler nelerdir? Köşe davaları destekliyorlar mı? Gerekliliği buluş anne olduğu için, UTF-8 kütüphaneler genellikle 1, 2, ve hatta 3 bayt karakterler sık sık ortaya çıkabilir, bu 4 baytlık karakterler düzgün destek olacaklar. Ancak, UTF-16 tüm sözde kitaplıkları düzgün çok nadiren meydana geldiği için vekil çiftleri destekler.

Sayım karakterler:VarbirleştirerekUnicode karakterleri. Örneğin kod noktası U 006E (n) ve U 0303 (birleştiren bir tilde) n form̃ ama kod noktası U 00F1 form ñ. Aynı bakmak gerekir, ama basit sayma algoritması ikincisi ilk örneği, 1 2 döndürür. Bu mutlaka yanlış değil, ama istediğiniz sonucu da olabilir.

Eşitlik için karşılaştırma:, А A; ve Α aynı görünüyor, ama Latin, Kiril ve sırasıyla Yunan ediyorlar. Ayrıca gibi durumlarda var C ve Ⅽ bir mektup, başka bir Roma rakamı. Buna ek olarak, göz önünde birleştirerek karakterler var. Daha fazla bilgi için Duplicate characters in Unicode bkz.

Yedek çifti:Bu yeterince sık bu YÜZDEN gelip, sadece bazı örnek linkler verdim.:

Diğerleri?:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008
  • L- Crysis

    L- Crysis

    30 Aralık 2011