Unicode, Unicode Big Endian veya UTF-8? Fark ne? Hangi format daha iyi?


19

İngilizce olmayan bir metin içeren bir metin dosyasını Not Defteri'ne kaydetmeye çalıştığımda Unicode , Unicode Big Endian ve UTF-8 arasında seçim yapma seçeneğim var . Bu biçimler arasındaki fark nedir?

Ben do varsayarsak değil (daha eski işletim sistemi sürümleri veya uygulamalar ile) herhangi geriye dönük uyumluluk istiyorum ve do not bu biçimlerin iyidir dosya boyutu, umurumda?

(Metnin, diğer dillere ek olarak Çince veya Japonca gibi dillerde de olabileceğini varsayın.)

Not: Aşağıdaki cevaplardan ve yorumlardan Notepad lingo'da Unicode UTF-16 (Little Endian), Unicode Big Endian UTF-16 (Big Endian) ve UTF-8'in UTF-8 olduğu görülmektedir.


Yanıtlar:


19

Dunno. Hangisi daha iyi: bir testere veya çekiç? :-)

Unicode UTF değil

Makalede, konuyla biraz daha ilgili olan biraz var:

  • UTF-8, ASCII setinden karakterlerin gösterilmesi için bayt boyutunu en aza indirmeye odaklanır (değişken uzunluk gösterimi: her karakter 1 ila 4 baytta temsil edilir ve ASCII karakterleri 1 bayta sığar). Joel'in dediği gibi:

“Şu sıfırlara bak!” Dediler, çünkü Amerikalılar ve U + 00FF'nin üzerinde nadiren kod noktalarını kullanan İngilizce metinlere bakıyorlardı. Ayrıca Kaliforniya'da korumak isteyen (alaycı) liberal hippilerdi. Eğer onlar Texans olsaydı, bayt sayısının iki katını karıştırmayı düşünmezlerdi. Ancak bu Kaliforniya wimps'leri, dizeler için aldığı depolama miktarını iki katına çıkarma fikrine dayanamadı

  • UTF-32, tüm karakterler için 4 bayt kullanarak kapsamlılık ve sabit uzunluklu gösterim üzerine odaklanır. En basit çeviri, doğrudan Unicode kod noktasını 4 bayta eşleme. Açıkçası, çok büyük boyutlarda verimli değil.

  • UTF-16 çoğu zaman 2 bayt kullanan ancak Temel Çok Dilli Düzlemde (BMP) bulunmayan belirli karakterleri temsil etmek için karakter başına 2 * 2 bayta kadar genişleyen bir uzlaşmadır.

Ayrıca bkz . Mutlak Minimum Her Yazılım Geliştiricisi Unicode ve Karakter Kümelerini Kesinlikle, Olumlu Olarak Bilmeli (Bahane Yok!)


4
Sorun, Unicode'un bir 'kodlama' olması, ancak bayt-bayt anlamında olmamasıdır. UTF-8/16 / 32'nin tümü Unicode kodlamalarıdır, ancak Unicode'un kendisi sembollerden sayılara bir eşlemedir. Sanırım bu karışıklığı önlemek için daha benzersiz bir terminoloji kullanabilirlerdi.
jerryjvl

4
Yine de, sorunun OP'sine göre, uygulamanın 'Unicode' yazdığı 'UTF-16' anlamına gelmesi ihtimaldir.
jerryjvl

3
UTF-8'in hedefinin ASCII ile geriye dönük uyumluluğun aksine "koruma" olduğundan emin değilim.
Bay Parlak ve Yeni 安 宇

@Johannes: Unicode Konsorsiyumu, UTF-16'da temsil edilemedikleri için asla U + 10FFFF üzerindeki kod noktalarını atamaya karar verdi. Bunun UTF-8'i 4 bayta sınırlama etkisi vardı.
user46971

1
"Unicode UTF değil" - çoğu için WTF;)
mlvljr

4

Avrupa dilleri için UTF-8 daha küçüktür. Doğu dilleri için fark çok açık değil.

Her ikisi de olası tüm Unicode karakterleri işleyecektir, bu nedenle uyumlulukta hiçbir fark yaratmamalıdır.


3

Düşündüğünüzden daha fazla Unicode karakter kodlaması var.

  • UTF 8

    UTF-8 kodlaması, 1-4 bayt arasında değişen genişliktedir ve her baytın üst bitleri kontrol bitleri olarak ayrılmıştır. İlk baytın önde gelen bitleri, bu karakter için kullanılan toplam bayt sayısını gösterir. Bir karakterin kod noktasının skaler değeri, kontrol olmayan bitlerin birleşimidir. Bu tabloda, xUnicode değerinin en düşük 8 bitini ytemsil eder, bir sonraki daha yüksek 8 biti ztemsil eder ve bundan daha yüksek bitleri temsil eder.

    Unicode              Byte1     Byte2     Byte3     Byte4
    U+0000-U+007F       0xxxxxxx            
    U+0080-U+07FF       110yyyxx  10xxxxxx          
    U+0800-U+FFFF       1110yyyy  10yyyyxx  10xxxxxx    
    U+10000-U+10FFFF    11110zzz  10zzyyyy  10yyyyxx  10xxxxxx
    
  • UCS-16
  • UCS-16BE
  • UCS-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE

1
Listelediğinizden daha fazla Unicode karakter kodlaması var. Örneğin UTF-1 , UTF-7 , UTF-EBCDIC , GB-18030 , MIME , UTF-9 ve UTF-18 ... Unicode verilerini kodlamak için herhangi bir ikili kodlama şemasını da kullanabilirsiniz. Devamını oku Unicode kodlamaları karşılaştırması
phuclv

1

"Unicode", "UTF-16" için kullanılan bir başka terimdir. UTF-8 karakter başına sekiz bit olarak kodlar.

Her iki durumda da, herhangi bir taşma 16 veya sekiz bite daha tahsis edilir.


Hangisi daha iyi?
R. Martinho Fernandes

"Bu duruma bağlıdır.
John Saunders

Bu özel soru için "Unicode" gerçekten "UTF-16" için başka bir terim olarak ABUSED gibi görünse de, genel olarak öyle değil - Jason'ın cevabına bakın.
Arjan

1
"Karakter başına" değil, "kod birimi başına"; hem UTF-8 hem de UTF-16, bir karakteri temsil etmek için birden fazla kod birimi kullanabilir. Microsoft terminolojisi dışında "Unicode" ve "UTF-16" aynı şey DEĞİLDİR.
user46971

1

Metin dosyaları gibi küçük dosyalarla tek gerçek avantaj, sonuçta ortaya çıkan dosya boyutudur. UTF-8 genellikle daha küçük dosyalar üretir. Ancak bu fark Çince / Japonca metinlerde daha az belirgin olabilir.


Ağ bant genişliği ve bellek kullanımında da bir fark olduğunu unutmayın.
Jason Baker

1
"UTF-8 genellikle daha küçük dosyalar üretir": Genel olarak değil. UTF-8, ASCII dosyaları için daha küçük dosyalar üretir. Bir dosya yalnızca U + 0800'ün üzerindeki Unicode kod noktalarından oluşuyorsa, UTF-8'de UTF-16'dan daha büyük olacaktır .
sleske

0

Tek kelimeyle, Unicode bir karakter kümesidir , Unicode Big Endian ve utf-8 ise karakterleri bilgisayarda 01 olarak depolamak için kullanılan iki kodlamadır .


Ve fark ...?
David Richerby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.