Unicode, UTF, ASCII, ANSI format farkları


352

Arasındaki fark nedir Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, ve ANSIkodlamaların?

Bunlar programcılar için ne şekilde yardımcı oluyor?





Yanıtlar:


470

Listeniz aşağıya gidiyor:

  • " Unicode " bir kodlama değildir, ancak maalesef pek çok belge bunu belirli bir sistemin varsayılan olarak hangi Unicode kodlamasını kullandığını belirtmek için kullanmaz. Windows ve Java'da bu genellikle UTF-16 anlamına gelir; diğer birçok yerde UTF-8 anlamına gelir. Düzgün olarak, Unicode herhangi bir özel kodlamaya değil soyut karakter kümesine atıfta bulunur.
  • UTF-16 : "kod birimi" başına 2 bayt. Bu, .NET'te ve genellikle Windows ve Java'da dizelerin yerel biçimidir. Temel Çok Dilli Düzlem (BMP) dışındaki değerler , vekil çiftler olarak kodlanır. Bunlar eskiden nispeten nadiren kullanılır, ancak şimdi birçok tüketici uygulamaları desteği emoji'yi amacıyla olmayan BMP karakterlerin farkında olması gerekir.
  • UTF-8 : Değişken uzunluk kodlaması, kod noktası başına 1-4 bayt. ASCII değerleri 1 bayt kullanılarak ASCII olarak kodlanır.
  • UTF-7 : Genellikle posta kodlaması için kullanılır. Muhtemelen ihtiyacınız olduğunu düşünüyorsanız ve posta yapmıyorsanız, yanılıyorsunuz. (Bu benim haber gruplarında vb. Gönderi yapan insanlar hakkındaki deneyimim - posta dışında, gerçekten hiç yaygın olarak kullanılmıyor.)
  • UTF-32 : Kod noktası başına 4 bayt kullanılarak sabit genişlikli kodlama. Bu çok verimli değil, BMP dışında hayatı kolaylaştırıyor. İsterseniz MiscUtil kütüphanemin bir Utf32Stringparçası olarak bir .NET sınıfım var. (Çok ayrıntılı bir şekilde test edilmedi, unutmayın.)
  • ASCII : Yalnızca alt 7 bit kullanılarak tek bayt kodlama. (Unicode kodu 0-127'yi gösterir.) Aksan vb. Yok.
  • ANSI: Sabit bir ANSI kodlaması yok - birçoğu var. Genellikle insanlar "ANSI" derken, "Sistemim için varsayılan yerel ayar / kod sayfası" anlamına gelir. Bu, Encoding.Default aracılığıyla elde edilir ve genellikle Windows-1252'dir, ancak diğer yerel ayarlar olabilir.

Unicode sayfamda daha fazlası ve Unicode sorunlarının hatalarını ayıklamak için ipuçları var .

Kodun diğer büyük kaynaktır unicode.org muhtemelen en kullanışlı biraz - Hiç aracılığıyla şekilde çalışır mümkün olacak daha fazla bilgi içeren kod çizelgeleri .


6
Microsoft'un 8 bit kod sayfalarına uygulandığında "ANSI" terimi yanlış bir adlandırmadır. ANSI standardizasyonu için sunulan taslaklara dayanıyorlardı, ancak ANSI'nin kendisi onları asla standartlaştırmadı. Windows-1252 (en yaygın olarak "ANSI" olarak adlandırılan kod sayfası) ISO 8859-1'e (Latin-1) benzer, ancak Windows-1252'nin 0x80..0x9F aralığında yazdırılabilir karakterler içermesi, burada ISO 8859-1 bu aralıkta kontrol karakterleri var. Unicode ayrıca bu aralıkta kontrol karakterlerine sahiptir. en.wikipedia.org/wiki/Windows_code_page
Keith Thompson

1
@ jp2code: Yapmazdım - ancak "HTTP üzerinden web sunucusundan geri gönderilen içerik" ile "e-posta yoluyla gönderilen içerik" arasında ayrım yapmanız gerekir. E-postayı gönderen web sayfası içeriği değil - muhtemelen arkasındaki uygulama. Web içeriği en iyi UTF-8'de olacaktır; posta içeriği olabilir onun 'için ince bugünlerde UTF-8 önünde bulundurmak şüpheli rağmen, UTF-7 olmak.
Jon Skeet

2
UTF-16, IMHO için, BMP dışındaki bir kod noktası vekil çiftler halinde 2 kod birimi (4 bayt) olarak kodlanacağı için "kod birimi başına 2 bayt" diyebilirim.
Ludovic Kuty

1
UTF-16LE (.NET içinde) ve BE arasındaki ve BOM nosyonu arasındaki farkları özlüyor.
Maarten Bodewes

2
@Andrew: Hayır, (genel) kodlama işareti yok. Windows 1252, Unicode BOM'yi temsil edemez ve her neyse, yalnızca bir bayt başına kodlama olduğu için mantıklı olmaz.
Jon Skeet

69

Karakter kodlamalarına başlamak için bazı okumalar: Yazılımda Joel: Mutlak Minimum Her Yazılım Geliştiricisi Kesinlikle, Olumlu Unicode ve Karakter Kümeleri Hakkında Bilmelisiniz (Bahane Yok!)

Bu arada - ASP.NET'in bununla hiçbir ilgisi yok. Kodlamalar evrenseldir.


7
Makale yazıldıktan 6 yıl sonra burada cevaplandı. Gönderinin yazılmasından 8 yıl sonra okudum. 14 yıl sonra hala iyi bir okuma. Bu hayatımın yarısından fazlasıydı. İnanılmaz.
Dave Knise
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.