İyi makalelerin bir yeri vardır inanıyoruz Bu konuda Web etrafında, ama burada kısa bir özet.
Hem UTF-8 hem de UTF-16, değişken uzunluk kodlamalarıdır. Bununla birlikte, UTF-8'de bir karakter en az 8 bite sahipken, UTF-16 karakter uzunluğu 16 bit ile başlar.
Ana UTF-8 artıları: vb basamak gibi
- Temel ASCII karakterleri, hiçbir desenli Latin harfleri, US-ASCII gösterimi ile aynıdır bir bayt işgal eder. Bu şekilde, tüm US-ASCII dizeleri, birçok durumda iyi geriye dönük uyumluluk sağlayan geçerli UTF-8 haline gelir.
- Boş sonlandırılmış dizeleri kullanmanıza olanak tanıyan boş baytlar, bu da büyük ölçüde geriye dönük uyumluluk sağlar.
- UTF-8, bayt sırasından bağımsızdır, dolayısıyla Big Endian/Little Endian sorunu hakkında endişelenmeniz gerekmez.
Ana UTF-8 eksileri:
- Birçok ortak karakterler kod noktasıyla ve bir kod noktası korkunç saymak hesaplayarak indeksleme yavaşlatır farklı uzunluğa sahiptir.
- Bayt sırası önemli olmasa da, bazen UTF-8, metnin UTF-8 olarak kodlandığını bildiren ve ayrıca metinle birlikte bile ASCII yazılımı ile uyumsuzluk bildiren BOM (bayt sırası işareti) içerir. ASCII karakterleri içerir. Microsoft yazılımı (Not Defteri gibi) özellikle BOM'u UTF-8'e eklemeyi seviyor.
Ana UTF-16 artıları:
- BMP (temel dilli düzlem) karakterleri, Latin, Kiril, en Çince dahil (ÇHC BMP zorunlu dışında bazı codepoints destek yapılmış), en Japon olabilir 2 bayt ile temsil edilir.Bu, metnin ek karakterleri içermemesi durumunda kodlama sayımını ve hesaplanmasını hızlandırır.
- Metin tamamlayıcı karakterlere sahip olsalar bile, yine de 16 bitlik değerler çiftleriyle temsil edilirler; bu, toplam uzunluğun hala iki tarafından bölünebileceği anlamına gelir ve dizenin ilkel bileşeni olarak 16 bit
char
kullanılmasına izin verir.
Ana UTF-16 eksileri: hayır boş sonlandırılmış dizeleri ve boşa bellek çok şey ifade US-ASCII dizeleri, null bayt
- sürü.
- Sabit uzunluklu bir kodlama olarak kullanmak, çoğu ortak senaryoda (çoğunlukla ABD/AB/Kiril alfabeleri/İsrail/Arap ülkeleri/İran ve diğer ülkelerde) çoğunlukla “işe yarar” olarak kodlanır. 't. Bu, programcıların vekil çiftlerin farkında olmaları ve önemli olduğu durumlarda doğru şekilde ele almaları gerektiği anlamına gelir!
- Değişken uzunluğudur, bu nedenle UTF-8'den daha az olsa da, kod noktalarını saymak veya dizine eklemek maliyetlidir. BE/LE orada alakasız çünkü Genelde
, UTF-16 bellek temsil için genellikle daha iyidir (sadece düzgün vekil çiftleri ele unutmayın) (sadece yerli düzen kullanın) ve indeksleme hızlıdır. Öte yandan, UTF-8, metin dosyaları ve ağ protokolleri için son derece iyidir, çünkü BE/LE sorunu yoktur ve nihayet sonlandırma, ASCII uyumluluğunun yanı sıra genellikle kullanışlı hale gelir.
jon skeet, kodlama hakkında iyi bir makaleye sahiptir .... http: //csharpindepth.com/Articles/General/Unicode.aspx –