2012-04-13 33 views
18

Olası Çoğalt:
Why UTF-32 exists whereas only 21 bits are necessary to encode every character?Neden UTF-24 yok?

maksimum Unicode kod noktası UTF-32 0x10FFFF olduğunu. UTF-32, 21 bilgi biti ve 11 gereksiz boş biti vardır. Öyleyse neden her kod noktasını 4 yerine 3 bayt depolamak için UTF-24 kodlaması (yani yüksek baytlı UTF-32) var?

+0

basit nedenidir. 16, 32, 8, 2 var, bu yüzden 24 tuhaf olurdu. Artı bellek blokları normalde 2^x bloklar halinde ortadan kaldırılır. Aynı sebeple computere 24MB ile gelmemiş veya HDD'ler 16GB ve 32GB yerine 24GB ile tanıtılmamıştır. –

cevap

19

Gerçek şu ki: UTF-24, 2007 yılında önerildi:

http://unicode.org/mail-arch/unicode-ml/y2007-m01/0057.html

belirtilen profesyonellere & eksileri olmak:

"UTF-24 
Advantages: 
1. Fixed length code units. 
2. Encoding format is easily detectable for any content, even if mislabeled. 
3. Byte order can be reliably detected without the use of BOM, even for single-code-unit data. 
4. If octets are dropped/inserted, decoder can resync at next valid code unit. 
5. Practical for both internal processing and storage/interchange. 
6. Conversion to code point scalar values is more trivial then for UTF-16 surrogate pairs 
    and UTF-7/8 multibyte sequences. 
7. 7-bit transparent version can be easily derived. 
8. Most compact for texts in archaic scripts. 
Disadvantages: 
1. Takes more space then UTF-8/16, except for texts in archaic scripts. 
2. Comparing to UTF-32, extra bitwise operations required to convert to code point scalar values. 
3. Incompatible with many legacy text-processing tools and protocols. " 

olarak David tarafından işaret Starner, http://www.mail-archive.com/[email protected]/msg16011.html:

Neden? UTF-24, Eski İtalik veya Gotik'teki bir belgeyi konuşmadıkça hemen hemen her zaman UTF-16'dan daha büyük olacaktır.UTF-8 kazanmak için yeterli alfabe numarası karakterleri hemen hemen her zaman yeterli ASCII ile birleştirilecek ve eğer değilse, UTF-16'yı kazanmak için yeterli BMP karakterleri kazanacaktır. Modern bilgisayarlar 24 bitlik topaklarla iyi anlaşmazlar; bellekte, paketlenmiş olduklarını ve daha sonra , UTF-16 veya UTF-32 çok daha yavaş olacağını belirtmedikçe, bir parça 32 bit alırlar. Ve diske depolanıyorsanız, BOCU veya SCSU'yu da kullanabilirsiniz (zaten standart olmayan ) veya UTF-8, UTF-16, BOCU veya SCSU ile standart sıkıştırmayı kullanabilirsiniz. Eğer sıkıştırılmış SCSU veya BOCU, eğer varsa UTF-24, 'un yarısını almalıdır.

Ayrıca aşağıdaki StackOverflow yazı kontrol edebilir: 24 yapı olmadığından

Why UTF-32 exists whereas only 21 bits are necessary to encode every character?

+2

İkinci teklif, 2003 yılından itibaren teklifime cevaben bir kaç yıl önceydi. –

+0

Şahsen, onların genişlemesini görmek isterim. Hala bir tonluk alan kaldığını biliyorum, fakat her dili henüz yapmadılar, tarihi diller. – Rahly