Metin kodlaması Metin kodlaması

Bu yazı UTF-8'in ne olduğunu anlamayan, ancak bunu anlamak isteyenlere yöneliktir ve mevcut belgeler genellikle konuyu çok kapsamlı bir şekilde kapsar. Burada daha önce birisinin bana söylemesini istediğim şekilde anlatmaya çalışacağım. Ne kadar sıklıkla kafamda UTF-8 hakkında püresi vardı?

Birkaç basit kural

  1. Yani, UTF-8 Unicode için bir "sarmalayıcı" dır. Bu ayrı bir karakter kodlaması değildir, “sarılı” bir Unicode'dur. Muhtemelen Base64 kodlamasını biliyorsunuzdur veya duymuşsunuzdur - ikili verileri yazdırılabilir karakterlere sarabilir. Yani burada, UTF-8, ikili veriler için Base64 ile Unicode için aynı Base64'tür. Bu sefer. Bunu anlarsanız, o zaman çok netleşecek. Ayrıca, Base64 gibi, karakterlerle uyumluluk sorununu çözdüğü de kabul edilir (Base64, tüm karakterlerin yazdırılabildiği dosyaları postayla e-postayla aktarmak için tasarlanmıştır)
  2. Ayrıca, kod UTF-8 ile çalışıyorsa, içinde hala Unicode kodlamaları ile çalışır, yani içinde derinlerde bir yerde Unicode karakterlerinin karakter tabloları vardır. Doğru, tablolara sahip olamazsınız unicode karakterlerBir dizgede kaç karakter olduğunu hesaplamanız gerekiyorsa, örneğin (aşağıya bakınız)
  3. UTF-8, eski programların ve günümüz bilgisayarlarının, KOI8, Windows-1251, vb. Gibi eski kodlamalarda olduğu gibi Unicode karakterleriyle normal şekilde çalışmasına izin vermek için tasarlanmıştır. UTF-8'de sıfır bulunan hiçbir bayt yoktur ASCII karakterleriyle çalışmayacağı gibi, bunlar normal ASCII veya 0x80 - 0x7F, C de yazılmış programlar altında da çalışan 0x80 - 0xFF'dir. Doğru, sembollerle doğru çalışmak için programın Unicode tablolarını bilmesi gerekir.
  4. Bir baytta en önemli 7. bite sahip olanların tümü (bitleri sıfırdan sayarsanız) UTF-8, Unicode kodlanmış akışının bir parçasıdır.

UTF-8 içinde

Eğer bit sistemini biliyorsanız, işte buradasınız. kısa notUTF-8 tarafından kodlandığı gibi:

UTF-8'deki bir Unicode karakterinin ilk baytı, 7. bitin her zaman bir olduğu ve 6. bit'in de her zaman bir olduğu bir bayt ile başlar. Bu durumda, ilk baytta, bitlere soldan sağa bakarsanız (7., 6. ve benzeri sıfır), bir Unicode karakterini kodlayan ilk dahil olmak üzere bayt sayısı kadar birim vardır. Bunların dizisi sıfırla bitiyor. Ve ondan sonra Unicode karakterinin kendisinin parçaları vardır. Unicode karakterinin kalan bitleri ikinciye, hatta üçüncü bayt içine düşüyor (en fazla üç, neden - aşağıya bakınız). Kalan baytlar, birincisi hariç, her zaman Unicode karakterinin bir sonraki bölümünün başlangıcında '10' ve ardından 6 bit ile başlar.

örnek

Örneğin: bayt var 110 10000 ve ikinci 10 011110 . Birincisi 110 ’ile başlar, bu iki ünite bulunduğunda, UTF-8 akışının iki baytı olacağı ve diğerlerinin de olduğu gibi ikinci bayt’ 10 ’ile başlayacağı anlamına gelir. Ve bu iki bayt, ilk parçadan + 100101'den ikinci parçaya kadar olan 10100 bitden oluşan Unicode sembolünü kodlar, sonuçta ortaya çıkar -\u003e 10000011110 -\u003e 41E   altıgen sistemde, veya U + 041E   unicode notasyonu yazarken. Bu büyük bir Rus sembolüdür.

Karakter başına kaç bayt?

Ayrıca, kaç bitin 16 biti kodlamak için UTF-8'e gittiğini görelim. unicode kodlama. İkinci ve daha fazla bayt her zaman en fazla 6 bit tutabilir. Bu nedenle, son bayttan başlarsak, iki bayt tam olarak (2. ve üçüncü) bırakılır ve ilk üçün kodlanması için 1110 ile başlamalıdır. Böylece bu sürümdeki ilk bayt maksimum değeri Unicode karakterinin ilk 4 bitini kodlayabilir. Çıkıyor 4 + 6 + 6 = 16   bayt. UTF-8'in Unicode karakter başına 2 veya 3 bayta sahip olabileceği (biri 6 bit (8 - 2 bit '10') kodlamaya gerek olmadığı için olamaz - çünkü bir ASCII karakteri olacaktır. Bu yüzden UTF'nin ilk baytı- 8 asla '10' ile başlayamaz).

Sonuç

Bu kodlama sayesinde, akışta herhangi bir bayt alabilir ve Unicode baytının bir karakter olup olmadığını (7. bit ASCII değilse, UTC-8 akışında birincisi mi yoksa ilk değil mi) belirleyebilirsiniz. '10', birincisi değil demektir), ilk değilse, o zaman ilk UTF-8 kodunu (6. biti 1 olacak) bulmak için byte-bye'e dönebilir veya sağa hareket edebilir ve tüm '10' baytları atlayabiliriz. sonraki karakteri bul. Bu kodlama sayesinde, programlar Unicode'u tanımadan, bir dizgede kaç karakter olduğunu sayar (UTF-8'in ilk baytına göre karakterin bayt cinsinden uzunluğunu hesaplar). Genel olarak, düşünürseniz, UTF-8 kodlaması çok akıllıca icat edilir ve aynı zamanda çok etkilidir.

Şu anda, çoğu kullanıcı karakterlerden oluşan metin bilgilerini işlemek için bir bilgisayar kullanıyor: harfler, sayılar, noktalama işaretleri vb.

1 bitlik bilgi kapasitesine sahip bir hücreye dayanarak, sadece 2 farklı durum kodlanabilir. Latin yazmacındaki klavyeden girilebilecek her karakter için benzersiz ikili kodunu almak için 7 bit gereklidir. Hartley formülüne göre 7 bitlik bir diziye dayanarak, N = 2 7 = 128 farklı sıfırlar ve olanlar kombinasyonları elde edilebilir, yani. ikili kodlar. Her karaktere bir ikili kod atayarak bir kodlama tablosu alırız. Kişi sembollerle, bilgisayarla - ikili kodlarıyla çalışır.

Latin klavye düzeni için, böyle bir kod tablosu tüm dünya için birdir, bu nedenle, Latin klavye düzeni kullanılarak yazılan metin herhangi bir bilgisayarda yeterli şekilde görüntülenecektir. Bu tablo denir ASCII(Amerikan Standart Bilgi Değişimi Kuralları) İngilizce olarak [eski], Rusça ise [aski] olarak telaffuz edilir. Aşağıda kodları ondalık biçimde gösterilen ASCII tablosunun tamamı gösterilmektedir. Klavyeden girdiğinizde, “*” sembolünün, bilgisayarın onu kod 42 (10), sırasıyla 42 (10) = 101010 (2) olarak algıladığını belirlemek için kullanılabilir - bu, “* sembolünün ikili kodudur. ". Bu tabloda 0'dan 31'e kadar olan kodlar dahil değildir.

tablo aSCII karakterleri

  kod   sembol   kod   sembol   kod   sembol   kod   sembol   kod   sembol   kod   sembol
  Boşluk çubuğu . @   P "   p
!   bir   S   bir   q
"   B   R,   b   r
#   C   S   c   s
$   D   T   d   t
%   E   U   e   u
&   F   V   f   v
"   G,   W   g   w
(   'H   X   h   x
)   ben   Y   ben   y
*   J   Z   j   z
+ :   K [   k {
, ;   L \   l |
- <   M ]   m }
. >   N- ^   n ~
/ ?   Ey _   o   DEL

Tek bir karakteri kodlamak için 1 bayta eşit olan bilgi miktarını kullanın, yani I = 1 byte = 8 bit. Olası olay K sayısını ve I bilgi miktarını belirten bir formül kullanarak, kaç tane hesaplayabiliriz farklı karakterler   Kodlayabilirsiniz (karakterlerin olası olaylar olduğu varsayılarak):

K = 2 I = 2 8 = 256,

yani sunum için metinsel bilgi   256 karakter kapasiteli alfabeyi kullanabilirsiniz.

Kodlamanın özü, her sembole 00000000 ila 11111111 arasında bir ikili kod veya buna karşılık gelen ondalık kodun 0 ila 255 olarak atanmasıdır.

Şu anda hatırlanması gerekir rusça kodlamak için harfler beş farklı kullanır kod tabloları (KOI - 8, CP1251, CP866, Mas, ISO), Ayrıca, bir tabloyla kodlanmış metinler başka bir kodlamada doğru görüntülenmeyecektir. Kombine karakter kodlama tablosunun bir parçası olarak görsel olarak gösterilebilir.

Aynı ikili koda farklı ikili semboller atanmıştır.

  İkili kod   Ondalık kod   KOI8   SR1251   SR866   ağırlık   ISO
  b   - -   T

Ancak, çoğu durumda, dönüştürme metin belgeleri   kullanıcı için de umurunda özel programlar   - Uygulamaya gömülü dönüştürücüler.

1997'den beri son sürümler Microsoft Office   yeni kodlamayı destekler. Denir Unicode (Unicode). Unicode   Her bir karakteri kodlamak için 2 bayt kullanılan bir kodlama tablosu, yani. 16 bit Bu tabloya göre N = 2 16 = 65 536 karakter kodlanabilir.

Unicode, aralarında Arapça, Ermeni, Bengalce, Birmanca, Yunanca, Gürcüce, Devanagari, İbranice, Kiril, Kıpti, Khmer, Latince, Tamilce, Hangul, Han (Çin, Japonya, Kore), Cherokee, dahil olmak üzere neredeyse tüm modern yazılı dilleri içerir. Etiyopya, Japonca (Katakana, Hiragana, Kanji) ve diğerleri.

Akademik amaçlı olarak, antik Yunanca, Mısır hiyeroglifleri, çivi yazısı, Maya yazısı, Etrüsk alfabesi dahil olmak üzere pek çok tarihi senaryo eklenmiştir.

Unicode, çok çeşitli matematiksel ve müzikal sembollerin yanı sıra piktogramlar da sunar.

Unicode Kiril karakterleri için iki kod aralığı vardır:

Kiril (# 0400 - # 04FF)

Kiril Ek (# 0500 - # 052F).

Ancak Unicode tablonun saf biçiminde sunulması, bir karakterin kodunun bir bayt değil, iki bayt alması halinde, metni depolamak için iki kez disk alanı miktarının ve iletişim kanalları yoluyla aktarmanın iki kez sürmesi nedeniyle engellenir.

Bu nedenle, pratikte Unicode UTF-8'in (Unicode Dönüşüm Formatı) sunumu daha yaygındır. UTF-8, 8 bit karakter kullanan sistemlerle en iyi uyumluluğu sağlar. UTF-8’e yazıldığında yalnızca 128’den küçük karakterlerden oluşan metinler, düz ASCII metnine dönüştürülür. Kalan Unicode karakterleri, uzunluğu 2 ila 4 baytlık dizilerle temsil edilir. Genel olarak, dünyadaki en yaygın semboller olan Latin alfabesi UTF-8'de hala 1 bayt olduğundan, bu kodlama saf Unicode'dan daha ekonomiktir.

Sayısal karakter kodunu belirlemek için kod tablosunu kullanabilirsiniz. Bunu yapmak için, "Ekle" - "Simge" menü noktasını seçin, ardından Simge iletişim kutusu ekranda belirecektir. Seçilen yazı tipi için bir sembol tablosu iletişim kutusunda belirir. Bu tablodaki karakterler, Space karakterinden başlayarak sırayla soldan sağa doğru satır satır düzenlenir.

Unicode (Unicode), yazılım ve donanım platformundan bağımsız olarak her bir karaktere benzersiz bir kod atanan bir karakter kodlama standardıdır.

Başlangıçta, karakterleri kodlamak için 8 bit kullanıldı, bu rakam 256 tane sıfır ve ondan oluşan kombinasyonlar veriyor. Bu, tüm Latin alfabesini, sayıları, noktalama işaretlerini, aritmetik işaretleri, özel kontrol karakterlerini kodlamak için yeterlidir. Standart ASCII oldu. Bir karakter bir byte'a eşit olduğunda da kullanışlı ve kompakt.

Ancak 256 değer orada başka dillerden karakter koymak için yeterli değildir. Yunan alfabesi, Kiril, Çince karakterler, matematiksel semboller vb. Şaşırtıcı olmayan, çünkü ASCII - Amerikan standart kodAmerikalılar için Amerikalılar tarafından geliştirilmiştir.

Zaten 1970'lerin başında, bilgisayarlar üniversitelerden, bilgisayar merkezlerinden, kapalı devlet kurumlarından küçük özel girişimlere ve ev kullanıcılarına yayıldı. ABD, Kanada İngiltere, artık bilgi teknolojisi dünyasında tekel değil. Her ülkenin kendi bilgi işlem merkezleri, bilişim üniversiteleri ve bu sektördeki patentleri vardır.

Sonuç olarak, çok sayıda alternatif kodlama belirir. Sonuçta, her yazı, kod tablosundaki yerinize ihtiyacınız var. Ancak aynı zamanda birçok sorun var.

Birincisi, bir kodlamadan diğerine kodların yanlış görüntülenmesidir. Dokümanın okunabilmesi için, makinenin bir kodlama karakterini bir başkasıyla eşleştirdiği özel bir tablo olması gerekir. Her bir kodlama çifti için böyle bir tabloya ihtiyaç vardır. Buna alternatif olarak, ilk ikisinin tüm karakterlerini içeren üçüncü kodlamayı kullanın. Bir kişi için uygun değildir ve makine kaynaklarının gereksiz yere kullanılması

İkinci sorun, font, belirli bir kod karakter tablosu için yaratılmıştır. Bazı karakter tabloları% 90'dan fazla eşleşebilir. Neredeyse aynı kodlamalar için farklı yazı tiplerini saklamak karlı değildir. Evrensel yazı tipleri oluşturabilirsiniz. Ancak, fonttaki hangi karakterlerin kodlamadaki hangi karakterlere karşılık geldiğini bulmanıza yardımcı olacak ek verileri kaydetmeniz gerekir.

80'lerin başında, metinlerdeki "timsah" krizi doruğa ulaştı. Evrensel bir kod tablosuna olan ihtiyaç belirginleşti. Tek bir standarda ihtiyacınız var. Tüm karakterlerin nereye sığacağı. 1991 yılında, böyle bir standart Unicode konsorsiyumu tarafından kabul edildi. Unicode adı altında. Konsorsiyum, tek bir kodlamanın ne olması gerektiğini belirleyen önde gelen BT şirketlerini içerir.

Değişken genişlikli bir kodlama kullanıyorsanız, başlangıçta ek algoritmalar gerekir. Belirli bir karakteri saklamak için kaç bayta ihtiyaç olduğunu belirleyecektir. Bir bit zincirinde, mevcut karakterin sonunun nerede olduğunu ve bir sonrakinin başlangıcının nerede olduğunu hesaplayacak algoritmalara sahip olmak gerekir. Bütün bunların zor olacağına karar verdik ve kodlamaya sabit genişlikte girdik. Değişken genişlikli kodlama, bir karakteri saklamak için gerektiği kadar bit kullanmanıza izin verir. Çok daha kompakt. Bu faktör başlangıçta ihmal edildi.

Yeni Unicode standardı için kaç bit gerekir? 8 bit, karakterler için 256 değer verecektir (2 8 = 256). Uygulama bunun yeterli olmadığını kanıtladı. 32 bit (2 32 = 2 294 967 296) karakter pozisyonları verir. Bu çok fazla. Çok fazla bilgisayar belleği kullanımı yetersiz. En iyi seçenek 16 bit almaktır (2 16 = 65536). Böylece Unicode'un ilk versiyonu 16 bitlik sabit bir genişlikti. Tüm karakterleri içermez, sadece yaranın içinde bilinen kodlamalarda en çok kullanılanları içerir. Örneğin, Unicode'da düşmedi, Çince karakterleri nadiren kullandı. Bazıları yüksek matematikten semboller.

Her Unicode karakterinin bir sıra numarası vardır. Standarda göre onaltılık sayılarla yazılır.

son unicode sürümleri   büyük ölçüde değiştirildi. Karar verdikleri ilk şey, mevcut tüm karakterleri bu kodlamaya koymaktı. Unicode karakterler değişken uzunluktadır. Kod tablosu iki alana bölünmüştür. İlkinde, en çok kullanılan tüm karakterleri saklayın. Bu, 0 ile 65535 arasındadır. Kalan boşluk nadir kullanılan karakterler için kullanılır. Herhangi bir karakter birkaç kodla gösterilebilir. Bu nedenle, mevcut unicode tablosu sürekli yeni sürümler normalize ve bırakın. Modern Unicode, soldan sağa ve sağdan sola Arapça karakterlerin yazılmasını destekler. Çift yönlü metinler oluşturmanıza bile olanak sağlar. Yani, aynı kod tablosuyla ilgili metin hem sağdan sola hem de tersi şekilde yazılmış karakterler içerebilir. Ancak bu özellik donanım aygıtları tarafından desteklenmelidir.

Unicode'da sadece çeşitli dillerin karakterlerini içermez. Ama aynı zamanda oldukça uzmanlaşmış matematiksel semboller, notlar. Tüm modern yazı içeriyor. Ve hatta Kıpti yazı, Cherokee, Etiyopya gibi nadiren kullanılır. Kod tablosundaki akademik çevreler için soyu tükenmiş senaryolar bile eklenmiştir. Örneğin: çivi yazısı, runes, Mısır hiyeroglifleri, Etrüsk alfabesi.

60'ların sonundan bu yana, bilgisayarlar metin bilgisini işlemek için giderek daha fazla kullanılıyor ve şimdi dünyadaki kişisel bilgisayarların çoğu (ve çoğu zaman) metin bilgisini işlemekle meşgul.

ASCII - Temel Latince metin kodlaması

Geleneksel olarak, tek bir karakteri kodlamak için, bilgi miktarı 1 baytyani, I = 1 bayt = 8 bit.

Tek bir karakteri kodlamak için 1 bayt bilgi gerekir. Sembolleri olası olaylar olarak kabul edersek, kaç farklı sembolün kodlanabileceğini hesaplamak mümkündür: N = 2I = 28 = 256.

Bu kadar çok sayıda karakter, Rus ve Latin alfabesinin büyük ve küçük harfleri, sayıları, işaretlerini, grafik sembollerini vb. İçeren metin bilgisini temsil etmek için yeterlidir. Kodlama, her karaktere, 0 - 255 arasında benzersiz bir ondalık kod atanması veya buna karşılık gelmesidir. 00000000 ila 11111111 arasındaki ikili kod.

Böylece, bir kişi karakterleri tarzlarına göre ve bir bilgisayarı - kodlarına göre ayırt eder. Bir bilgisayara metin bilgisi girdiğinizde, bu ikili kodludur, karakterin görüntüsü ikili koduna dönüştürülür.

Kullanıcı klavyede bir sembol bulunan bir tuşa basar ve bilgisayara sekiz elektrik darbesi (ikili karakter kodu) belirli bir dizi girer. Karakter kodu rAM Bir bayt işgal ettiği bilgisayar. Bir bilgisayar ekranında bir karakter gösterme sürecinde, ters bir işlem gerçekleştirilir - kod çözme, yani bir karakter kodunun imajına dönüştürülmesi. Uluslararası bir standart olarak, Bilgi Değişimi için Amerikan Standart Kodu (ASCII) kod tablosu kabul edilmiştir ASCII Standart Parça Tablosu Belirli bir kodun bir sembole atanması, kod tablosunda sabit bir anlaşma konusu olması önemlidir. İlk 33 kod (0'dan 32'ye kadar) sembollere değil, işlemlere (satır sonu, boşluk girişi vb.) Karşılık gelir. Kodlar 33 ila 127 uluslararasıdır ve Latin alfabesi karakterlerine, sayılarına, işaretlerine karşılık gelir. aritmetik işlemler   ve noktalama işaretleri. 128'den 255'e kadar olan kodlar ulusaldır, yani ulusal kodlamalarda farklı semboller aynı koda karşılık gelir.

Ne yazık ki, şu anda Rus harfleri için beş farklı kod tablosu vardır (KOI8, CP1251, CP866, Mac, ISO), bu yüzden bir kodlamada yaratılan metinler bir başkasında doğru görüntülenmeyecektir.

Şu anda, yaygın yeni uluslararası standart   Her karaktere bir bayt değil, iki karaktere ayrılan Unicode, böylece onun yardımı ile 256 karakter değil, N = 216 = 65536 farklı kod yazabilirsiniz

Unicode - evrensel bir metin kodlamanın ortaya çıkışı (UTF 32, UTF 16 ve UTF 8)

Güney-Doğu Asya'daki dil grubunun bu binlerce karakteri, genişletilmiş ASCII kodlamalarındaki karakterleri kodlamak için tahsis edilen bilgilerin bir baytında tanımlanamadı. Sonuç olarak, adlı bir konsorsiyum oluşturuldu. Unicode(Unicode - Unicode Konsorsiyumu), evrensel bir metin kodlaması görünümüyle ilgilenen birçok IT liderinin (yazılım üreten, donanım kodlayan, font oluşturan) işbirliği ile.

Unicode konsorsiyumunun himayesinde yayınlanan ilk metnin kodlaması UTF 32. UTF 32 kodlama adındaki sayı, tek bir karakteri kodlamak için kullanılan bit sayısı anlamına gelir. 32 bit, yeni evrensel UTF 32 kodlamasında tek bir karakteri kodlamak için gerekli olacak 4 baytlık bilgidir.

Sonuç olarak, ikinci durumda genişletilmiş ASCII ve UTF 32 ile kodlanmış aynı metin dosyası, dört kat daha büyük bir boyuta (ağırlıkça) sahip olacaktır. Bu kötü, ama şimdi UTF 32 ile otuz saniyelik iki saniyeye eşit olan karakter sayısını (büyük bir marjla gerçekten gerekli herhangi bir değeri karşılayacak milyarlarca karakter) kodlama fırsatımız var.

Ancak, Avrupa grubunun dilleri olan birçok ülkede kodlamada bu kadar çok sayıda karaktere ihtiyaç duyulmadı, ancak UTF 32 kullanırken, metin belgelerinin ağırlığında dört kat artış, sonuç olarak da İnternet trafiği ve depolanan veri miktarında bir artış olmadı. verileri. Bu çok fazla ve hiç kimse bu atıkları karşılayamıyor.

Evrensel gelişimi sonucunda unicode kodlama UTF 16 çıktıo kadar başarılı oldu ki, kullandığımız tüm karakterler için varsayılan olarak temel alan olarak benimsendi. UTF 16, tek bir karakteri kodlamak için iki bayt kullanır. Örneğin ameliyathanede windows sistemi   Başlat - Programlar - Standart - Sistem Araçları - Karakter tablosu yolunu takip edebilirsiniz.

Sonuç olarak, sisteminizde kurulu bulunan tüm fontların vektör formlarını içeren bir tablo açılır. Gelişmiş seçeneklerinde ayarlanan Unicode karakterini seçerseniz, her font için içinde bulunan tüm karakter aralığını ayrı ayrı görebilirsiniz. Bu arada, bu karakterlerden herhangi birine tıklayarak iki baytlık kodunu UTF 16 kodlamasında dört onaltılık basamaktan oluşan görebilirsiniz:

UTF 16'da 16 bit kullanarak kaç karakter kodlayabilirsiniz? Unicode'da temel alan olarak 65.536 karakter (ikisi on altı kişilik) alındı. Ek olarak, UTF 16 ile yaklaşık iki milyon karakteri kodlamanın yolları vardır, ancak bir milyon karakterlik genişletilmiş metin alanıyla sınırlıdır.

Ancak Unicode kodlamanın UTF 16 olarak adlandırılan başarılı sürümü bile, yalnızca İngilizce dilinde programlar yazanlara pek tatmin etmedi, çünkü genişletilmiş sürümden geçiş yaptıktan sonra, aSCII kodlaması   UTF 16'ya göre, belgelerin ağırlığı iki katına çıktı (ASCII'de karakter başına bir bayt ve UTF 16 kodlamasında aynı karakter için iki bayt). Bu, tam olarak Unicode konsorsiyumunda herkesle ve her şeyle tanışmak için geldi değişken uzunluklu metin kodlaması.

Bu Unicode kodlaması çağrıldı UTF 8. İsimdeki sekiz tanesine rağmen, UTF 8 değişken uzunluktaki tam bir kodlamadır, yani. metnin her karakteri, bir ila altı bayt arasında bir uzunluk dizisinde kodlanabilir. Uygulamada, UTF 8'de, yalnızca bir ila dört baytlık bir aralık kullanılır, çünkü dört baytlık kodun ötesinde, hiçbir şey teorik olarak hayal etmek mümkün değildir.

UTF 8'de, tüm Latin karakterleri eski ASCII kodlaması gibi bir bayta kodlanır. Dikkate değer olan, yalnızca Latince kodlanması durumunda, Unicode'u anlamayan programlar bile UTF 8'de kodlananları okuyacaktır. ASCII kodlamanın temel kısmı UTF 8'e aktarılır.

UTF 8'deki Kiril karakterler   iki baytta ve örneğin Gürcüce - üç baytta kodlanmış. Yaratıldıktan sonra Unicode Konsorsiyumu uTF kodlamaları   16 ve UTF 8 ana sorunu çözdü - şimdi yazı tiplerinde tek bir kod alanımız var. Yazı tipi üreticileri yalnızca bu kod alanını metin karakterlerinin vektör formlarıyla doldurma yeteneklerinden ve yeteneklerinden gelebilir.

Kodlama Bilgisi

Bilgisayarın belleğindeki herhangi bir sayı (belirli sınırlar içinde) ikili sayı sisteminin sayıları ile kodlanır. Bunun için basit ve açık bir çeviri kuralları var. Ancak, bugün bilgisayar zahmetli hesapların icracı rolünden çok daha yaygın olarak kullanılmaktadır. Örneğin, metin ve multimedya bilgileri bilgisayar hafızasında saklanır. Bu nedenle, ilk soru ortaya çıkar:

Karakterler (harfler) bilgisayar belleğinde nasıl saklanır?

Her harf, karakterlerin birbirini takip ettiği ve dolayısıyla ardışık tamsayılarla numaralandırılabildiği belirli bir alfabeye aittir. Her harf pozitif bir tamsayı ile ilişkilendirilebilir ve karakter kodu olarak adlandırılabilir.. Bilgisayarın belleğinde saklanacak olan kod budur ve bir ekranda veya kağıda görüntülendiğinde ilgili sembole “dönüştürülür”. Sayıların gösterimini, bilgisayar belleğindeki karakterlerin temsilinden ayırt etmek için, aynı zamanda hangi verilerin belirli bir bellek alanında kodlandığı hakkında bilgi depolanması gerekir.

Belirli bir alfabenin harflerinin rakamlarla yazılması, sözde kodlama tablosu. Başka bir deyişle, belirli bir alfabenin her bir karakteri, belirli bir kodlama tablosuna göre kendi sayısal koduna sahiptir.

Ancak, dünyada çok sayıda alfabe vardır (İngilizce, Rusça, Çince, vb.). Bu nedenle, aşağıdaki soru:

Bilgisayarda kullanılan tüm alfabeleri nasıl kodlarım?

Bu soruyu cevaplamak için tarihsel yoldan gidelim.

XX yüzyılın 60'lı yıllarında amerikan Ulusal Standartlar Enstitüsü (ANSI)   Daha sonra hepsinde kullanılan bir karakter kodlama tablosu geliştirilmiştir. işletim sistemleri. Bu tablo denir ASCII (Bilgi Değişimi İçin Amerikan Standart Kodu - Bilgi Değişimi İçin Amerikan Standart Kodu). Biraz sonra ortaya çıktı aSCII'nin genişletilmiş sürümü.

ASCII kod tablosuna göre, bir karakteri temsil etmek için 1 bayt (8 bit) tahsis edilmiştir. 8 hücreli bir set 2 8 = 256 farklı değer alabilir. İlk 128 değer (0 - 127 arasında) sabittir ve ondalık basamaklar, Latin alfabesinin harfleri (büyük ve küçük harf), noktalama işaretleri (tam durak, virgül, parantez vb.), Boşluk ve çeşitli içeren tablonun ana bölümünü oluşturur. servis karakterleri (sekme, satır sonu vb.) 128 ila 255 arasındaki değerler, tablonun ek bir bölümünü oluşturur; burada ulusal alfabelerin karakterlerini kodlamanın alışılmış olduğu bir şeydir.

Çok sayıda ulusal alfabe bulunduğundan, genişletilmiş ASCII tabloları çeşitli varyantlarda mevcuttur. Rus dili için bile, birkaç kodlama tablosu vardır (Windows-1251 ve Koi8-r yaygındır). Bütün bunlar ek zorluklar yaratır. Örneğin, bir kodlamada yazılan bir mektubu göndeririz ve alıcı diğerinde okumayı dener. Sonuç olarak, krakozyabry görür. Bu nedenle, okuyucunun metin için başka bir kodlama tablosu uygulaması gerekir.

Başka bir problem var. Bazı dillerin alfabelerinde, çok fazla karakter vardır ve bunlar 128-255 tek baytlık kodlamadan kendilerine atanan konumlara uymazlar.

Üçüncü problem, eğer metin birkaç dil kullanıyorsa (örneğin, Rusça, İngilizce ve Fransızca) ne yapmalı? Aynı anda iki masayı kullanamazsınız ...

Bu sorunları çözmek için, Unicode kodlaması bir kerede geliştirilmiştir.

Unicode karakter kodlaması standardı

Yukarıdaki problemleri 90'lı yılların başında çözmek için, bir karakter kodlama standardı geliştirilmiştir. Unicode. Bu standart, metinde hemen hemen tüm dilleri ve simgeleri kullanmanıza izin verir.

Unicode'da karakter kodlaması için 31 bit (4 bayt eksi bir bit) sağlanmıştır. Olası kombinasyon sayısı sınırsız sayıda verir: 2 31 = 2 147 483 684 (yani iki milyardan fazla). Bu nedenle Unicode, “ölü” ve tamamlanmış bile olsa, bilinen tüm dillerin alfabelerini açıklar, birçok matematik ve diğer özel karakterler. Ancak, 31 bit Unicode'un bilgi kapasitesi hala çok büyük. Bu nedenle, kısaltılmış 16 bitlik versiyon (2 16 = 65 536 değer), tüm modern alfabelerin kodlandığı yerlerde daha sık kullanılır.

Unicode'da ilk 128 kod ASCII tablosu ile aynıdır.