Unicode ve ASCII arasındaki kesin fark nedir?
ASCII'nin toplam 128 karakteri vardır (genişletilmiş kümede 256).
Unicode karakterler için boyut belirtimi var mı?
Unicode ve ASCII arasındaki kesin fark nedir?
ASCII'nin toplam 128 karakteri vardır (genişletilmiş kümede 256).
Unicode karakterler için boyut belirtimi var mı?
Yanıtlar:
ASCII, 0–127 sayılarıyla eşleşen 128 karakter tanımlar. Unicode tanımlar 2 (az) 21 , benzer şekilde, sayılar 0-2 eşleme karakterleri, 21 (gerçi bütün numaralar şu anda atanır değil ve bazı saklıdır).
Unicode, ASCII'nin bir üst kümesidir ve 0–127 sayıları, ASCII'de Unicode'dakilerle aynı anlama sahiptir. Örneğin, 65 sayısı "Latin başkenti" A "anlamına gelir.
Unicode karakterler genellikle bir 8 bit bayta sığmadığından, Unicode karakterleri UTF-32 ve UTF-8 gibi bayt dizilerine depolamanın çeşitli yolları vardır.
Anlama neden ASCII ve Unicode ilk etapta oluşturulan bana ikisi arasındaki farkları anlamak yardımcı oldu.
ASCII, Kökenleri
Diğer cevaplarda belirtildiği gibi, ASCII bir karakteri temsil etmek için 7 bit kullanır. 7 bit kullanarak maksimum 2 ^ 7 (= 128) farklı kombinasyona * sahip olabiliriz . Bu, maksimum 128 karakteri temsil edebileceğimiz anlamına gelir.
Bekle, 7 bit mi? Ama neden 1 bayt (8 bit) olmasın?
Son bit (8.), eşlik biti olarak hatalardan kaçınmak için kullanılır . Bu yıllar önce geçerliydi.
Çoğu ASCII karakterleri,? & !, böyle abc ABC, 123 olarak alfabenin yazdırılabilir karakterler vb diğerleri kontrol karakterleri gibi satırbaşı, satır besleme vb sekmesi,
ASCII'de birkaç karakterin ikili sunumuna bakın:
0100101 -> % (Percent Sign - 37)
1000001 -> A (Capital letter A - 65)
1000010 -> B (Capital letter B - 66)
1000011 -> C (Capital letter C - 67)
0001101 -> Carriage Return (13)
ASCII tablosunun tamamını buradan görebilirsiniz .
ASCII sadece İngilizce içindir.
Ne? Neden sadece İngilizce? Orada birçok dil var!
Çünkü bilgisayar endüstrisinin merkezi o sırada ABD'deydi. Sonuç olarak, onlar destek aksan veya A, U, C, N, vb (aka gibi diğer işaretlere gerek yoktu aksan ).
ASCII Genişletilmiş
Bazı akıllı insanlar dillerini desteklemek için daha fazla karakter kodlamak (örneğin Fransızca'da "é" yi desteklemek için) 8. biti (parite için kullanılan bit) kullanmaya başladı. Sadece bir ekstra bit kullanarak, orijinal ASCII tablosunun boyutunu iki katına çıkararak 256 karaktere kadar eşleştirin (2 ^ 8 = 256 karakter). Ve daha önce olduğu gibi 2 ^ 7 değil (128).
10000010 -> é (e with acute accent - 130)
10100000 -> á (a with acute accent - 160)
Bu "ASCII'nin adı daha önce olduğu gibi 7 bite değil, 8 bite kadar genişletildi" sadece "genişletilmiş ASCII" veya "8 bit ASCII" olarak adlandırılabilir.
As @Tom onun yorumunda işaret var "diye bir şey aşağıda genişletilmiş ASCII " Henüz bu bu 8 bitlik hile başvurmak için kolay bir yoldur. 8 bitlik ASCII tablosunun birçok varyasyonu vardır, örneğin ISO Latin-1 olarak da adlandırılan ISO 8859-1 .
Unicode, Yükseliş
ASCII Extended, Latin alfabesine dayanan diller için sorunu çözüyor ... Peki ya tamamen farklı bir alfabeye ihtiyaç duyan diğerleri? Yunan? Rusça? Çinliler ve benzerleri?
Tamamen yeni bir karakter setine ihtiyacımız olurdu ... Bu Unicode'un arkasındaki rasyoneldi. Unicode her dilden her karakteri içermez, ancak çok büyük miktarda karakter içerdiğinden emin olun ( bu tabloya bakın ).
Sabit sürücünüze "Unicode" olarak metin kaydedemezsiniz. Unicode metnin soyut bir temsilidir. Bu soyut temsili "kodlamanız" gerekir. İşte burada kodlama devreye giriyor.
Kodlamalar: UTF-8'e karşı UTF-16'a karşı UTF-32
Bu cevap temelleri açıklamada oldukça iyi bir iş çıkarıyor:
UTF-8, ilk 128 karakter için ASCII setini kullanır. Bu kullanışlı çünkü ASCII metninin UTF-8'de de geçerli olduğu anlamına geliyor.
Mnemonics:
Not:
Neden 2 ^ 7?
Bu bazıları için açıktır, ancak her ihtimale karşı. 0 veya 1 ( İkili Kod ) ile dolu yedi yuvamız var . Her birinin iki kombinasyonu olabilir. Yedi noktamız varsa, 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 ^ 7 = 128 kombinasyonumuz var. Bunu yedi tekerlekli bir kombinasyon kilidi olarak düşünün, her tekerlekte sadece iki sayı var.
Kaynak: Wikipedia , bu harika blog yazısı ve başlangıçta bu özeti gönderdiğim Mocki .
ASCII, 0 ila 127 arasında 128 kod noktasına sahiptir. Tek bir 8 bit bayta sığabilir, 128 ila 255 değerleri diğer karakterler için kullanılma eğilimindedir. Uyumsuz seçimlerle kod sayfası felaketine neden olur . Bir kod sayfasında kodlanan metin, başka bir kod sayfasında varsayılan veya tahmin edilen bir program tarafından doğru okunamaz.
Unicode bu felaketi çözmek için geldi. Sürüm 1, genellikle 16 bit olarak kodlanmış 65536 kod noktasıyla başladı. Daha sonra sürüm 2'de 1.1 milyon kod noktasına genişletildi. Mevcut sürüm 6.3, mevcut 1.1 milyon kod noktasının 110.187'sini kullanıyor. Bu artık 16 bite uymuyor.
Örneğin Microsoft ve Apple işletim sistemleri tarafından kullanılan v2 geldiğinde 16 bitlik kodlama yaygındı. Ve Java gibi dil çalışma zamanları. V2 spec, 1.1 milyon kod noktasını 16 bite eşleştirmenin bir yolunu buldu. UTF-16 adı verilen bir kodlama, bir kod noktasının 2 veya 4 bayt alabileceği değişken uzunluklu kodlama. Orijinal v1 kod noktaları 2 bayt, eklenenler 4 alır.
* Nix işletim sistemlerinde ve araçlarında kullanılan çok yaygın olan bir diğer değişken uzunluklu kodlama UTF-8'dir, bir kod noktası 1 ile 4 bayt arasında olabilir, orijinal ASCII kodları 1 bayt alır, geri kalanı daha fazla alır. Değişken olmayan tek uzunluk kodlaması UTF-32'dir, bir kod noktası için 4 bayt alır. Çok savurgan olduğu için sık kullanılmaz. UTF-1 ve UTF-7 gibi başkaları da göz ardı edilir.
UTF-16/32 kodlamaları ile ilgili bir sorun, bayt sırasının metin akışını oluşturan makinenin endianitesine bağlı olmasıdır. Bu yüzden UTF-16BE, UTF-16LE, UTF-32BE ve UTF-32LE karışımına ekleyin.
Bu farklı kodlama seçeneklerine sahip olmak, kod sayfası felaketini, UTF seçiminin "en iyi" olduğu programcılar arasında ateşli tartışmalarla bir dereceye kadar geri getirir. İşletim sistemi varsayılanları ile olan ilişkileri hemen hemen çizer. Karşı önlemlerden biri, bir metin akışının başlangıcında, akışın geri kalanının nasıl kodlandığını gösteren bir BOM, Bayt Sırası İşareti, özel bir kod noktası (U + FEFF, sıfır genişlik alanı) tanımıdır. Hem UTF kodlamasını hem de endianess'i gösterir ve bir metin oluşturma motorunda nötrdür. Ne yazık ki isteğe bağlıdır ve birçok programcı bunu ihmal etme haklarını talep etmektedir, bu nedenle kazalar hala oldukça yaygındır.
java Unicode için destek sağlar, yani tüm dünyadaki alfabe destekler. Java'daki karakter boyutu 2 bayttır. Ve aralık 0 ila 65535 arasındadır.
ASCII'nin grafik karakterlere ve kontrol karakterlerine (kontrol kodları) ayrılmış 128 kod konumu vardır.
Unicode'un 1.114.112 kod konumu vardır. Bunların yaklaşık 100.000'i şu anda karakterlere tahsis edilmiştir ve birçok kod noktası kalıcı olarak karakter olmayan hale getirilmiştir (yani herhangi bir karakteri kodlamak için kullanılmamıştır) ve çoğu kod noktası henüz atanmamıştır.
ASCII ve Unicode'un ortak noktaları şunlardır: 1) Karakter kodlarıdır. 2) Unicode'un ilk 128 kod konumu, ASCII kontrol karakterlerinin kod konumlarının, kontrol karakterleri olarak sadece ASCII adlarına karşılık gelen isimlerle tanımlanması dışında ASCII ile aynı anlamlara sahip olduğu tanımlanmıştır, ancak anlamları Unicode'da tanımlanmamış.
Ancak bazen Unicode (Unicode standardında bile!) “Geniş ASCII” olarak karakterize edilir. Bu, temel olarak, Unicode'un bir zamanlar ASCII ile aynı şekilde evrensel bir karakter kodu olması gerektiği fikrini aktarmaya çalışan (ASCII'nin karakter repertuarının evrensel kullanım için umutsuzca yetersiz olmasına rağmen), farklı sistemler ve uygulamalar ve farklı diller için.
Unicode bu şekilde yalnızca karakterlerin “mantıksal boyutunu” tanımlar: Her karakterin belirli bir aralıkta bir kod numarası vardır. Bu kod numaraları farklı aktarım kodlamaları kullanılarak sunulabilir ve dahili olarak bellekte Unicode karakterler, karakter aralığına bağlı olarak genellikle karakter başına bir veya iki 16 bit miktar kullanılarak, bazen karakter başına bir 32 bit miktar kullanılarak temsil edilir.
ASCII ve Unicode iki karakter kodlamasıdır. Temel olarak, dijital ortamda yazılabilir, saklanabilir, iletilebilir ve okunabilir olmaları için ikili karakterlerde fark karakterlerinin nasıl temsil edileceğine dair standartlardır. İkisi arasındaki temel fark, karakteri kodlama biçimidir ve her biri için kullandıkları bit sayısıdır. ASCII başlangıçta her karakteri kodlamak için yedi bit kullanmıştır. Daha sonra orijinalin görünen yetersizliğini gidermek için Genişletilmiş ASCII ile sekize çıkarıldı. Buna karşılık, Unicode 32, 16 ve 8 bit kodlama arasında seçim yapabileceğiniz değişken bir bit kodlama programı kullanır. Daha fazla bit kullanmak, daha büyük dosyalar pahasına daha fazla karakter kullanmanıza izin verirken, daha az bit size sınırlı bir seçenek sunar, ancak çok fazla yer tasarrufu sağlar. Daha az bit kullanma (ör.
Unicode'un sorunun olmasının ana nedenlerinden biri, standart olmayan birçok ASCII programından kaynaklandı. Microsoft ve diğer birçok yazılım şirketi tarafından kullanılan yaygın sayfayı kullanmadığınız sürece, karakterlerinizin kutu şeklinde görünmesiyle ilgili sorunlarla karşılaşabilirsiniz. Tüm karakter kod noktaları standartlaştırıldığı için Unicode bu sorunu neredeyse tamamen ortadan kaldırır.
Unicode'un bir diğer önemli avantajı, maksimumda çok sayıda karakteri barındırabilmesidir. Bu nedenle, Unicode şu anda çoğu yazılı dili içeriyor ve daha da fazlası için yer var. Buna İngilizce gibi tipik soldan sağa komut dosyaları ve hatta Arapça gibi sağdan sola komut dosyaları dahildir. Çince, Japonca ve diğer birçok varyant da Unicode'da temsil edilir. Yani Unicode yakında değiştirilmeyecek.
O sırada zaten yaygın olarak kullanılan eski ASCII ile uyumluluğu korumak için Unicode, ilk sekiz bitin en popüler ASCII sayfasınınkilerle eşleşeceği şekilde tasarlandı. Dolayısıyla, ASCII kodlu bir dosyayı Unicode ile açarsanız, dosyada doğru kodlanmış karakterleri almaya devam edersiniz. Bu, halihazırda ASCII kullananlar için yeni bir kodlama standardı benimsemenin etkisini azalttığı için Unicode'un benimsenmesini kolaylaştırdı.
Özet:
1.ASCII uses an 8-bit encoding while Unicode uses a variable bit encoding.
2.Unicode is standardized while ASCII isn’t.
3.Unicode represents most written languages in the world while ASCII does not.
4.ASCII has its equivalent within Unicode.
Verilen sayılar sadece 1 karakter depolamak içindir
UTF'nin ASCII'nin bir üst kümesi olmasının ötesinde, ASCII ve UTF arasında bilinmesi gereken bir diğer iyi fark, disk dosyası kodlaması ve rasgele bellekte veri gösterimi ve depolanmasıdır. Programlar, verilerin başlangıcında özel bayt sırası işareti kodları tespit ederek veya verilerin programlayıcı niyetinden verilerin metin olduğunu varsayarak ve daha sonra, verilerin bir metin kodlamasında veya başka bir kodlamada.
0x
Onaltılı veri için geleneksel önek gösterimini kullanarak , temel iyi referans, ASCII metninin olası ASCII karakter değerlerinden birini temsil 0x00
etmek için bayt değerleri ile başlamasıdır . UTF metni normalde UTF8 için baytlarla başlanarak belirtilir . UTF16 için bayt başlatmak veya başlangıç bayt emriyle belirtilen bayt metnin endian-lık sipariş ile kullanılır. Olası bayt değerlerinin ASCII aralığında olmayan basit bayt değerlerinin varlığı, verilerin muhtemelen UTF olduğunu da gösterir.0x7F
0xEF 0xBB 0xBF
0xFE 0xFF
0xFF 0xFE
Verileri belirli bir kodlama standardında kodlanmış metin olarak yorumlanması gerektiğini belirtmek için farklı kodlar kullanan başka bayt sırası işaretleri vardır.