SORU
8 ŞUBAT 2009, Pazar


Unicode için program Nasıl?C programlama:

Önkoşullar sıkı Unicode programlama yapmak için gerekli olan nedir?

Bu benim kod char tip her yerde kullanmaması gerektiğini ve işlevleri wint_t wchar_t ile ilgili kullanılması gerektiği anlamına mı geliyor?

Ve rolü bu senaryoda belge karakter dizileri oynadığı nedir?

CEVAP
9 ŞUBAT 2009, PAZARTESİ


C standardı (C99) geniş karakterler ve çoklu-bayt karakterler için sağlar, ancak bu geniş karakter tutabilir ne hakkında garanti yok olduğundan, onların değeri oldukça sınırlıdır. Belirli bir uygulama için kullanışlı bir destek sağlar, ama eğer kod uygulamaları arasında hareket etmek mümkün olmalıdır, yararlı olacağını yetersiz bir garantisi yoktur.

Sonuç olarak, bu yaklaşım Hans van Eck tarafından önerilen YOĞUN bakım - Unicode için Uluslararası Bileşenler - kütüphane etrafında bir sarıcı yazmak olan) ses, IMO.

UTF-8 kodlaması vardır birçok meziyeti, hangi birini istiyorsun bozma verileri (tarafından kesiliyor, örneğin), o zaman kopyalanabilir tarafından işlevleri tam olarak farkında inceliklerini UTF-8 kodlaması. Bu kategorik wchar_t durum böyle değildir.

Tam Unicode 21-bit biçiminde bir. Bu, rezervleri U 10FFFF U 0000 kod noktaları Unicode.

Biri yararlı şeyler hakkında UTF-8, UTF-16 ve UTF-32 biçimleri (UTF duruyor Unicode Transformation Format - Unicode) dönüştürebilirsiniz arasındaki üç temsilleri kaybı olmadan bilgi. Her diğerlerini temsil edebilir ve herhangi bir şeyi temsil edebilir. Her ikisi de UTF-8 ve UTF-16 multi-byte biçimleri vardır.

UTF-8 olduğu bilinen bir multi-byte biçimi, dikkatli bir yapıya mümkün kılan bulmak için başlangıç karakter bir dize güvenilir, başlangıç herhangi bir noktasında dize. Tek baytlık karakter sıfır yüksek bit setine sahip. Multi-byte karakter ilk karakter ile başlayan bir bit desenler 110, 1110 veya 11110 (2 bayt 3 bayt veya 4 baytlık karakter) ile bir sonraki bayt her zaman başlangıç 10. Devam karakterleri her zaman aralığında .. 0xBF 0x80. UTF-8 karakter en kısa biçimde temsil edilmesi gereken kurallar vardır. Bu kuralların bir sonucu bayt 0xC0 ve 0xC1 (0xF8..0xFF) UTF-8 veri geçerli görünür.

 U 0000 ..   U 007F  1 byte   0xxx xxxx
 U 0080 ..   U 07FF  2 bytes  110x xxxx   10xx xxxx
 U 0800 ..   U FFFF  3 bytes  1110 xxxx   10xx xxxx   10xx xxxx
U 10000 .. U 10FFFF  4 bytes  1111 0xxx   10xx xxxx   10xx xxxx   10xx xxxx

Aslında, Unicode 16-bit kod bir dizi olur ve her şey 16-bit kodu bir boşluk içine sığacak sanılmıştı. Ne yazık ki, gerçek dünya daha karmaşık ve mevcut 21-bit kodlama için genişletilmiş olmalı.

UTF-16 böylece tek bir birim (16-bit sözcük) bir kod ayarlamak için 'Temel Çokdilli Düzlem', yani karakterler Unicode kod noktası U U 0000 .. FFFF, ama kullanan iki adet (32-bit) için karakter dışında bu dizi. Bu nedenle, UTF-16 kodlama ile çalışan kod UTF-8 olmalı gibi değişken genişlik kodlamalar ele almak mümkün olması gerekir. Çift birim karakterler için kodları Suretler denir.

Suretler Unicode değerleri iki özel aralığından puan kod, lider olarak kullanmak için ayrılmış, ve UTF-16 eşleştirilmiş kodu birim değerleri gerisine düştü. Ayrıca yüksek aralığı denir, Suretler U DBFF için U D800 ve sonunda, ya da düşük, Suretler U DFFF U DC00. Karakterler doğrudan, ama sadece bir çift olarak temsil etmezler beri Suretler olarak da adlandırılır.

UTF-32, tabii ki, tek bir depolama biriminde herhangi bir Unicode kod noktası kodlayabilir. Hesaplama için verimli ama depolama için değil.

ICU çok daha fazla bilgi bulmak ve web siteleri Unicode.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • The Dubstep FX

    The Dubstep

    5 Mart 2011