UTF-32 - UTF-32

UTF-32 (32- bit Unicode Transformation Format ), kod noktası başına tam olarak 32 bit (dört bayt ) kullanan Unicode kod noktalarını kodlamak için kullanılan sabit uzunluklu bir kodlamadır (ancak çok daha az sayıda olduğu için baştaki bitlerin sayısı sıfır olmalıdır). 2 32'den fazla Unicode kod noktası, aslında sadece 21 bit gerektirir). UTF-32, değişken uzunluklu kodlamalar olan diğer tüm Unicode dönüştürme biçimlerinin aksine sabit uzunluklu bir kodlamadır. UTF-32'deki her 32 bitlik değer, bir Unicode kod noktasını temsil eder ve bu kod noktasının sayısal değerine tam olarak eşittir.

UTF-32'nin ana avantajı, Unicode kod noktalarının doğrudan indekslenmesidir (ancak genel olarak harfler, yani " grafem kümeleri" veya bazı emojiler doğrudan indekslenemez ve bir dizenin görüntülenen genişliğini hesaplamak daha kolay değildir). Bir dizi kod noktasında N. kod noktasını bulmak sabit zamanlı bir işlemdir. Buna karşılık, değişken uzunluklu bir kod , bir dizideki N. kod noktasını bulmak için sıralı erişim gerektirir . Bu, UTF-32'yi, ASCII için yaygın olarak yapıldığı gibi, bir dizedeki her konumu incelemek için birer birer artan tam sayıları kullanan kodda basit bir değiştirme yapar .

UTF-32'nin ana dezavantajı , her zaman sıfır olan 11 bit dahil olmak üzere kod noktası başına dört bayt kullanarak alan açısından verimsiz olmasıdır. BMP'nin ötesindeki karakterler çoğu metinde nispeten nadirdir (örneğin bazı popüler emojilere sahip metinler hariç) ve genellikle boyutlandırma tahminleri için göz ardı edilebilir. Bu, UTF-32'yi UTF-16 boyutunun iki katına yakın yapar . ASCII alt kümesinde kaç karakter olduğuna bağlı olarak, UTF-8 boyutunun dört katına kadar olabilir .

Tarih

Orijinal ISO 10646 standardı , Evrensel Karakter Kümesi'ndeki (UCS) her kod noktasının 0 ila 0x7FFFFFFFF arasında 31 bitlik bir değerle temsil edildiği UCS-4 adlı 32 bitlik bir kodlama biçimi tanımlar (işaret biti kullanılmamıştır ve sıfırdır). ). Kasım 2003'te, Unicode, UTF-16 kodlamasının kısıtlamalarına uyması için RFC 3629 tarafından kısıtlandı : U+10FFFF'den büyük kod noktaları (ve ayrıca U+D800'den U+DFFF'ye kadar yüksek ve düşük yedekler) açıkça yasaklandı. Bu sınırlı alt küme UTF-32'yi tanımlar. ISO standardı (Unicode 2.1'de 1998 itibariyle) 0xE00000 ila 0xFFFFFF ve 0x60000000 ila 0x7FFFFFFF "özel kullanım için ayrılmış" olmasına rağmen, bu alanlar sonraki sürümlerde kaldırılmıştır. ISO/IEC JTC 1/SC 2 Çalışma Grubu 2'nin İlkeler ve Prosedürler belgesi, gelecekteki tüm kod noktaları atamalarının Unicode aralığıyla sınırlı olacağını belirttiğinden, UTF-32, tüm UCS kod noktalarını ve UTF-32'yi temsil edebilecektir. ve UCS-4 aynıdır.

analiz

Kod noktası başına sabit sayıda bayt uygun görünse de, göründüğü kadar kullanışlı değildir. UTF-8 ve UTF-16'ya kıyasla (her ikisi de en fazla 2-4 kod birimine bakarak kesilecek nokta için geriye doğru arama yapabilir) ile karşılaştırıldığında, kesmeyi kolaylaştırır, ancak önemli ölçüde değil . Uygulamada, çünkü örneğin emojisi ZWJ dizileri (ve / veya emoji değiştiricileri muhtemelen değişen cilt rengi ), bazı emoji'yi böyle "👨🦲 Man: kel" olarak artık bir kod noktası ve "👩🦰 Woman: Kırmızı Saç" ve bu nedenle metnin, her biri bir kod noktasıyla temsil edilen bir sembol listesi olduğuna güvenilemez.

Kodun, 0 ila N–1 arasındaki kod noktalarını daha önce incelemeden N. kod noktasını bulmak istemesi son derece nadirdir . Örneğin, XML ayrıştırma, önce tüm önceki karakterlere bakmadan bir karakterle hiçbir şey yapamaz. Böylece, her karakter için 1 artan bir tamsayı indeksi, kod birimlerinde ölçülen ve her karakter incelenirken kod birimlerinin sayısıyla artırılan bir tamsayı ofseti ile değiştirilebilir. Bu, UTF-32'nin algılanan hız avantajlarını ortadan kaldırır.

UTF-32, bir dizenin görüntülenen genişliğini hesaplamayı kolaylaştırmaz, çünkü "sabit genişlikli" bir yazı tipiyle bile, karakter konumu başına birden fazla kod noktası ( karakterlerin birleştirilmesi ) veya kod noktası başına birden fazla karakter konumu (" CJK ideografları için " grafem kümeleri" ). Kendilerini soldan sağa dillerle ve önceden oluşturulmuş karakterlerle sınırlayan düzenleyiciler, sabit boyutlu kod birimlerinden yararlanabilir, ancak bu tür düzenleyicilerin BMP olmayan karakterleri desteklemesi pek olası değildir ve bu nedenle UTF-16 ile eşit derecede iyi çalışabilir .

Kullanmak

UTF-32'nin ana kullanımı, verilerin karakter dizileri yerine tek kod noktaları veya glifler olduğu dahili API'lerdedir. Örneğin, modern metin oluşturmada, son adımın her biri koordinatları (x,y) içeren yapıların bir listesini oluşturmak ve çizilecek glifi tanımlayan tek bir UTF-32 kod noktası oluşturmak yaygın bir uygulamadır . Genellikle Unicode olmayan bilgiler, her kelimenin "kullanılmayan" 11 bitinde saklanır.

Windows'ta UTF-32 dizelerinin kullanımı ( wchar_t'nin 16 bit olduğu yerde ) neredeyse yok gibidir. Unix sistemlerinde, wchar_t türünün 32 bit olarak tanımlanması nedeniyle UTF-32 dizeleri bazen, ancak nadiren uygulamalar tarafından dahili olarak kullanılır . UTF-16 yerine bunları kullanmak için 3.2'ye kadar olan Python sürümleri derlenebilir ; sürüm 3.3'ten itibaren tüm Unicode dizeleri UTF-32'de depolanır, ancak tüm kod noktalarını bu boyutta yapmak için "en büyük Unicode sıralı (1, 2 veya 4 bayt) ile [kod noktasına] bağlı olarak" önde gelen sıfır baytlar optimize edilmiştir . Seed7 ve Lasso programlama dilleri, doğrudan indekslemenin önemli olduğu inancıyla tüm dizeleri UTF-32 ile kodlarken, Julia programlama dili 1.0 sürümüyle yerleşik UTF-32 desteğinden uzaklaşarak dili yalnızca UTF-8 dizelerine sahip olacak şekilde basitleştirdi. "UTF-8 Everywhere Manifesto"nun ardından (diğer tüm kodlamalar eski olarak kabul edildi ve standart kitaplıktan pakete taşındı).

Varyantlar

Teknik olarak geçersiz olsa da, vekil yarılar genellikle kodlanır ve izin verilir. Bu, geçersiz UTF-16'nın (Windows dosya adları gibi) UTF -8'in WTF-8 varyantının çalışmasına benzer şekilde UTF-32'ye çevrilmesine olanak tanır . Bazen eşleştirilmiş suretler, CESU-8'e benzer şekilde, BMP olmayan karakterler yerine kodlanır . Çok sayıda kullanılmayan 32 bitlik değer nedeniyle, bunun için bir standart olmamasına rağmen, UTF-8 hatalarını kodlamak için Unicode olmayan değerler kullanarak geçersiz UTF-8'i korumak da mümkündür.

Ayrıca bakınız

Referanslar

Dış bağlantılar