Değişken genişlikli kodlama - Variable-width encoding

Bir değişken genişlikte kodlayan bir tür karakter kodlayan farklı uzunluklarda kodları kodlamak için kullanıldığı şema karakter kümesi genellikle bir, gösterimi için (sembollerin bir repertuar) bilgisayar . En yaygın değişken genişlikli kodlamalar, farklı karakterleri kodlamak için değişen sayıda bayt ( sekizli ) kullanan çok baytlı kodlamalardır . (Bazı yazarlar, özellikle Microsoft belgelerinde, yanlış bir adlandırma olan çok baytlı karakter kümesi terimini kullanırlar , çünkü temsil boyutu, karakter kümesinin değil kodlamanın bir özniteliğidir.)

Karakter başına bir bayttan daha azını kullanan erken değişken genişlikli kodlamalar, bazen ilk mikrobilgisayarlar için macera oyunlarında İngilizce metni daha az bayta paketlemek için kullanıldı . Ancak diskler (teyplerden farklı olarak, isteğe bağlı olarak metnin yüklenmesine izin veren rastgele erişime izin verir), bilgisayar belleğindeki artışlar ve genel amaçlı sıkıştırma algoritmaları , bu tür hileleri büyük ölçüde geçersiz kılmıştır.

Çok baytlı kodlamalar genellikle, mevcut bir kısıtlama ile geriye dönük uyumluluğu bozmadan kodlanabilen karakter sayısını artırma ihtiyacının sonucudur . Örneğin, karakter başına bir bayt (8 bit) ile 256 olası karakter kodlanabilir; 256'dan fazla karakter kodlamak için, açık seçim, kodlama birimi başına iki veya daha fazla bayt kullanmaktır, iki bayt (16 bit) 65.536 olası karaktere izin verir, ancak böyle bir değişiklik mevcut sistemlerle uyumluluğu bozar ve bu nedenle olmayabilir. hiç mümkün olmasın.

Genel yapı

Çok baytlı bir kodlama sisteminin amacı, mevcut uygulama yazılımındaki değişiklikleri en aza indirmek olduğundan, diğer karakterlerin kodlarında birden fazla birim olsa bile, bazı karakterlerin önceden var olan tek birimli kodlarını korumaları gerekir. Sonuç olarak, değişken genişlikli bir kodlamada üç tür birim vardır: tek bir birimden oluşan singletons , çok birimli bir dizide önce gelen öncü birimler ve çok birimli bir dizide daha sonra gelen iz birimleri . Girdi ve görüntüleme yazılımının açıkça çok baytlı kodlama şemasının yapısını bilmesi gerekir, ancak diğer yazılımların genellikle bir çift baytın iki ayrı karakteri mi yoksa yalnızca bir karakteri mi temsil ettiğini bilmesi gerekmez.

Örneğin, dört karakterli " I♥NY " dizesi UTF-8'de şu şekilde kodlanmıştır ( onaltılık bayt değerleri olarak gösterilir ): 49 E2 99 A5 4E 59 . Bu dizideki altı birimden 49 , 4E ve 59 tek tonlardır ( I, N ve Y için ), E2 bir öncü birimdir ve 99 ve A5 iz birimleridir. Kalp simgesi, ana birim ve iki iz biriminin birleşimiyle temsil edilir.

UTF-8, bir programın üç tür birimi tanımlamasını kolaylaştırır, çünkü bunlar ayrı değer aralıklarına düşer. Aralıklar çakışabileceğinden, daha eski değişken genişlikli kodlamalar tipik olarak iyi tasarlanmamıştır. Değişken genişlikli kodlamayla ilgilenen bir metin işleme uygulaması, çeşitli birimleri tanımlamak ve metni doğru bir şekilde yorumlamak için metni tüm tanımlayıcı dizilerin başından itibaren taramalıdır. Bu tür kodlamalarda, metnin ortasında bir dizi aranırken yanlış pozitiflerle karşılaşılabilir. Örneğin, DE, DF, E0 ve E1 onaltılık değerlerinin tümü ya öncü birimler ya da iz birimleri olabilir, o zaman iki birimli DF E0 dizisinin aranması DE DF E0 E1 dizisinde yanlış bir pozitif sonuç verebilir. iki ardışık iki birim diziden oluşur. Tek bir bozuk veya kayıp birimin, çok birimli dizilerin büyük bir çalışmasının tüm yorumunu yanlış hale getirme tehlikesi de vardır. Üç tür birimin de ayrık olduğu bir değişken genişlikli kodlamada, dizi araması her zaman yanlış pozitifler olmadan çalışır ve (kod çözücünün iyi yazılmış olması şartıyla) bir birimin bozulması veya kaybı yalnızca bir karakteri bozar.

CJK çok baytlı kodlamalar

Çok baytlı kodlamaların ilk kullanımı, 256 karakterden fazla büyük karakter kümelerine sahip olan Çince, Japonca ve Korece'nin kodlanması içindi. İlk başta kodlama 7 bitlik sınırla sınırlandırıldı. ISO-2022-JP, ISO-2022-CN ve ISO-2022-KR kodlamalar talebi birimleri ve iz birimlerinin her ikisi için bir dizi 21-7E (onaltılı) kullanılmıştır, ve ISO 2022'nin çıkış sırasını kullanarak tekil onları işaretlenmiş tek bayt ve çok bayt modu arasında geçiş yapın. İlk başta toplam 8.836 (94×94) karakter kodlanabilir ve daha sonraki 94×94 karakter setleri anahtarlama ile kodlanabilir. CJK için ISO 2022 kodlama şemaları internette hala kullanılmaktadır. Bu kodlamaların durum bilgisi olan doğası ve büyük örtüşme, onları işlemeyi çok zorlaştırır.

Açık Unix EUC-JP, EUC-CN ve EUC-KR: platformlar, ISO 2022'nin 7 bit kodlama 8 bit kodlama şemaları, Genişletilmiş UNIX kod kümesi ile ikame edilmiştir. Çok birimli diziler ve kodlamaları durum bilgisi yapan kaçış dizili tekiller arasında ayrım yapmak yerine, çok birimli diziler en anlamlı bit kümesine sahip olarak, yani 80-FF (onaltılık) aralığında olacak şekilde işaretlenirken, tekli diziler sadece 00–7F aralığında. Öncü birimler ve takip birimleri A1 ila FE (onaltılık) aralığındaydı, yani ISO 2022 kodlamalarındaki aralıklarıyla aynıydı, ancak yüksek bit 1'e ayarlanmıştı. Bu kodlamaların çalışması oldukça kolaydı. sınırlayıcılarınız ASCII karakterleriydi ve dizeleri sabit uzunluklarda kısaltmaktan kaçındınız, ancak çok baytlı bir karakterin ortasındaki bir boşluk yine de büyük bozulmalara neden olabilir.

PC'de ( DOS ve Microsoft Windows platformları), Japonca ve Geleneksel Çince için tüm singleton'ların, öncü birimlerin ve izleme birimlerinin çakıştığı iki kodlama oluşturuldu: Sırasıyla Shift-JIS ve Big5 . Shift-JIS'de, ana üniteler 81–9F ve E0–FC aralığına, takip üniteleri 40–7E ve 80–FC aralığına ve tek tonlar 21–7E ve A1–DF aralığına sahipti. Big5'te, öncü birimler A1–FE aralığına, takip birimleri 40–7E ve A1–FE aralığına ve tek tonlar 21–7E aralığına sahipti (tüm değerler onaltılı olarak). Bu örtüşme, en azından sembollerin çoğunun benzersiz bayt değerlerine sahip olmasına rağmen (garip bir şekilde ters eğik çizgi olmamasına rağmen) işlemeyi yeniden zorlaştırdı.

Unicode değişken genişlikli kodlamalar

Unicode : Standart iki değişken genişlikte seti olan UTF-8 ve UTF-16 (aynı zamanda sahip olan bir sabit genişlikli kodlama UTF-32 ). Başlangıçta, hem Unicode hem de ISO 10646 standartları, Unicode 16 bit ve ISO 10646 32 bit olmak üzere sabit genişlikteydi. ISO 10646 , tekillerin 00–9F aralığına, öncü birimlerin A0–FF aralığına ve iz birimlerinin A0–FF ve 21–7E aralıklarına sahip olduğu UTF-1 adlı bir değişken genişlikli kodlama sağladı. Değerlerin çakışması bakımından Shift JIS ve Big5'e benzeyen bu kötü tasarım nedeniyle, Unicode'u ilk uygulayan Plan 9 işletim sisteminin mucitleri, onu terk etti ve Unicode için çok daha iyi tasarlanmış değişken genişlikli bir kodlama ile değiştirdi. : Tekillerin 00–7F aralığına sahip olduğu UTF-8, aşırı uzun dizileri önlemek ve UTF-16'nın kodlama kapasitesiyle senkronizasyonu korumak için ana birimler C0–FD (şimdi aslında C2–F4) aralığına sahiptir; bkz. UTF -8 makale) ve takip birimleri 80–BF aralığına sahiptir. Öncü birim ayrıca kaç tane takip biriminin takip ettiğini söyler: biri C2–DF'den sonra, ikisi E0–EF'den sonra ve üçü F0–F4'ten sonra.

UTF-16, orijinal Unicode'un (1.x) 65.536 karakterlik sınırını, 16 bit kodlamayla uyumluluğu bozmadan kırmak için tasarlandı. UTF-16'da, singleton'lar 0000–D7FF (55.296 kod noktası) ve E000–FFFF (8192 kod noktası, toplamda 63.488) aralığına, öncü birimler D800–DBFF (1024 kod noktası) aralığına ve iz birimleri DC00– aralığına sahiptir. DFFF (1024 kod noktası, toplamda 2048). Unicode terminolojisinde sırasıyla yüksek vekiller ve düşük vekiller olarak adlandırılan öncü ve iz birimleri, 1024×1024 veya 1.048.576 ek karakter eşler ve 1.112.064 (63.488 BMP kod noktası + yüksek ve düşük yedek çiftlerle temsil edilen 1.048.576 kod noktası) kodlanabilir kod noktaları yapar , veya Unicode dilindeki skaler değerler (vekiller kodlanamaz).

Ayrıca bakınız

Notlar

Referanslar