UTF-8, UTF-16 ve UTF-32


487

UTF-8, UTF-16 ve UTF-32 arasındaki farklar nelerdir?

Hepsinin Unicode depolayacağını ve her birinin bir karakteri temsil etmek için farklı sayıda bayt kullandığını anlıyorum. Birini diğerinden seçmenin bir avantajı var mı?


36
Unicode'un nasıl çalıştığı ile ilgileniyorsanız youtube.com/watch?v=MijmeoH9LT4

1
Video UTF-8'e odaklanıyor ve evet, değişken uzunluk kodlamasının nasıl çalıştığını ve çoğunlukla yalnızca sabit uzunluktaki ASCII'yi okuyan veya yazan bilgisayarlarla uyumlu olduğunu açıklıyor. Unicode çocuklar UTF-8 kodlaması tasarlarken akıllıydılar.
dakika

1
Dönüşüm ve karşılaştırma için çevrimiçi bir araç oluşturdum .
Amit Kumar Gupta

1
UTF-8, kaydedilmiş dosyalar için çoğu modern yazılımda fiili standarttır . Daha spesifik olarak, HTML ve yapılandırma ve çeviri dosyaları için en yaygın kullanılan kodlamadır (örneğin, Minecraft, tüm metin bilgileri için başka bir kodlamayı kabul etmez). UTF-32 dahili bellek temsili için hızlıdır ve UTF-16 , şu anda yalnızca tarihsel nedenlerle Win32'de kullanılan bir tür kullanımdan kaldırılmıştır ( UTF-16, Windows 95 bir şey olduğunda sabit uzunluktaydı )
Kotauskas

@VladislavToncharov UTF-16 asla sabit uzunluklu bir kodlama değildi. UCS-2 ile karıştırıyorsunuz.

Yanıtlar:


373

UTF-8, ASCII karakterlerinin bir metin bloğundaki karakterlerin çoğunu temsil etmesi durumunda bir avantaja sahiptir, çünkü UTF-8 bunları 8 bit (ASCII gibi) olarak kodlar. Yalnızca ASCII karakterleri içeren bir UTF-8 dosyasının bir ASCII dosyasıyla aynı kodlamaya sahip olması da avantajlıdır.

UTF-16, ASCII'nin baskın olmadığı yerlerde daha iyidir, çünkü öncelikle karakter başına 2 bayt kullanır. UTF-8, üst düzey karakterler için 3 veya daha fazla bayt kullanmaya başlar; burada UTF-16, çoğu karakter için sadece 2 bayta kalır.

UTF-32, 4 bayt içindeki tüm olası karakterleri kapsayacaktır. Bu onu oldukça şişiriyor. Kullanmanın herhangi bir avantajı düşünemiyorum.


165
UTF-32 avantajı: saklanan verileri 32-bit Unicode kod noktasına kod çözmenize gerek yoktur. Kod noktası, diziniz / vektörünüz / dizenizde zaten mevcuttur.
richq

22
Tekerleği tekrar uygulamak zorunda kalırsanız (cennet size yardımcı olur) ayrıştırmak da daha kolaydır.
Paul McMillan

24
UTF-8'in ağ aktarımlarında bir avantajı vardır - verileri her seferinde bir bayt (4'ün aksine) aktardığınız için endianness konusunda endişelenmenize gerek yoktur.
Tim Čas

30
@richq Kod noktası her zaman bir karaktere karşılık gelmediği için UTF-32'de karakter karakter işleme yapamazsınız.
hamstergene

4
UTF-32 avantajı: string manipülasyonu utf-8 eşdeğerine kıyasla muhtemelen daha hızlıdır
Wes

331

Kısacası:

  • UTF-8: ASCII ile geriye dönük uyumlu değişken genişlikte kodlama. ASCII karakterleri (U + 0000 - U + 007F) 1 bayt alır, kod noktaları U + 0080 - U + 07FF alır 2 bayt alır, kod noktaları U + 0800 - U + FFFF 3 bayt alır, kod noktaları U + 10000 - U + 10FFFF 4 bayt alır. İngilizce metin için iyi, Asya metni için çok iyi değil.
  • UTF-16: Değişken genişlikte kodlama. Kod noktaları U + 0000 - U + FFFF 2 bayt alır, kod noktaları U + 10000 - U + 10FFFF 4 bayt alır. İngilizce metin için kötü, Asya metin için iyi.
  • UTF-32: Sabit genişlikte kodlama. Tüm kod noktaları dört bayt alır. Muazzam bir bellek domuzu, ama hızlı bir şekilde çalıştırılması. Nadiren kullanılmış.

Uzun: Wikipedia'ya bakınız: UTF-8 , UTF-16 ve UTF-32 .


65
@ spurrymoses: Kesinlikle veri baytlarının kapladığı alan miktarından bahsediyorum. UTF-8 Asya karakteri başına 3 bayt gerektirirken, UTF-16 Asya karakteri başına sadece 2 bayt gerektirir. Bilgisayarların bir programın belleğinde depolanan ortalama metin miktarına kıyasla tonlarca belleği olduğu için bu gerçekten önemli bir sorun değil.
Adam Rosenfield

12
UTF-32 artık nadiren kullanılmıyor ... osx ve linux wchar_tvarsayılanları 4 bayta ayarlandı. gcc, -fshort-wcharboyutu 2 bayta düşüren ancak std libs ile ikili uyumluluğu bozan bir seçeneğe sahiptir.
Vine'th

9
@PandaWood ofcource UTF-8 herhangi bir karakteri kodlayabilir! Ancak bellek gereksinimini UTF-16 için olan gereksinimle karşılaştırdınız mı? Konuyu kaçırıyor gibisin!
Ustaman Sangat

16
Birisi UTF-8'in Unicode Kodlayamayanlar Dahil Tüm Kodlama Formatları bağlamında "Asya metni için iyi değil" olduğunu söyleseydi, elbette yanlış olur. Ama bağlam bu değil. Bellek gereksinimlerinin bağlamı, sorunun (ve cevabın) Asya metnini kodlayacak ancak farklı miktarlarda bellek / depolama alanı kullanan UTF-8, UTF-16 ve UTF-32'yi karşılaştırması gerçeğinden kaynaklanmaktadır. Göreceli iyiliklerinin doğal olarak tamamen bellek gereksinimleri bağlamında olacağı sonucuna varılır. "Çok iyi değil"! = "İyi değil".
Paul Gregory

5
@McGafter: Tabii ki var. Güvenilirlik istiyorsanız, doğrudan Unicode Konsorsiyumu'ndaki atın ağzına gidin . UTF- * kodlamalarının açıklaması için bölüm 2.5'e bakın. Ancak kodlamalar hakkında basit ve üst düzey bir anlayış elde etmek için Wikipedia makalelerinin çok daha ulaşılabilir bir kaynak olduğunu düşünüyorum.
Adam Rosenfield

116
  • UTF-8 değişkeni 1 ila 4 bayttır.

  • UTF-16, değişken 2 veya 4 bayttır.

  • UTF-32 4 bayt olarak sabitlenmiştir .

Not: UTF-8, en son kurallara göre 1 ila 6 bayt alabilir: https://lists.gnu.org/archive/html/help-flex/2005-01/msg00030.html


35
UTF8 aslında 1 ila 6 bayttır.
Urkle

6
@Urkle teknik olarak doğrudur, çünkü Unicode v6.3 U-0010FFFF dahilinde bitse de UTF32 / LE / BE'nin tüm aralığının eşlenmesi U-00200000 - U-7FFFFFFF içerir. İşte 5 ve 6 bayt utf8'in

4
bunları ilgili referans parçaları ve kaynakları ile yedekliyor musunuz?
n611x007

20
@Urkle No, UTF-8, 5 veya 6 bayt olamaz. Unicode kod noktaları, 21 bit ile sınırlıdır, bu da UTF-8 ila 4 baytı sınırlar. (Elbette keyfi büyük tamsayıları kodlamak için UTF-8 ilkesini genişletebilirsiniz, ancak Unicode olmaz.) Bkz. RFC 3629.
rdb

11
Alıntı yapmak Wikipedia: Kasım 2003'te UTF-8, RFC 3629 tarafından UTF-16 karakter kodlamasının kısıtlamalarıyla eşleşecek şekilde kısıtlandı: yüksek ve düşük vekil karakterlere karşılık gelen kod noktalarını üç baytlık dizilerin% 3'ünden daha fazla çıkardı ve U + 10FFFF'de biten dört baytlık dizilerin ve beş ve altı baytlık dizilerin hepsinin% 48'inden fazlasını kaldırdı.
Adam Calvet Bohl

79

Unicode, her grafik sembolüne benzersiz bir tamsayı değeri atayan tek bir büyük karakter kümesi tanımlar (bu büyük bir basitleştirmedir ve aslında doğru değildir, ancak bu sorunun amaçları için yeterince yakındır). UTF-8/16/32 bunu kodlamanın farklı yollarıdır.

Kısaca, UTF-32 her karakter için 32 bit değerleri kullanır. Bu, her karakter için sabit genişlikli bir kod kullanmalarını sağlar.

UTF-16 varsayılan olarak 16 bit kullanır, ancak bu yalnızca 65k olası karakter sağlar, bu da tam Unicode kümesi için yeterince yakın değildir. Bu yüzden bazı karakterler 16 bitlik değerler kullanır.

UTF-8 varsayılan olarak 8 bit değerleri kullanır, bu da 127 ilk değerin sabit genişlikli tek baytlık karakterler olduğu anlamına gelir (en önemli bit, bunun çok baytlı bir dizinin başlangıcı olduğunu belirtmek için kullanılır, 7 gerçek karakter değeri için bit). Diğer tüm karakterler 4 bayta kadar olan diziler olarak kodlanır (bellek çalışıyorsa).

Bu da bizi avantajlara götürüyor. Herhangi bir ASCII karakteri UTF-8 ile doğrudan uyumludur, bu nedenle eski uygulamaları yükseltmek için UTF-8 yaygın ve açık bir seçimdir. Neredeyse tüm durumlarda, en az belleği kullanır. Öte yandan, bir karakterin genişliği hakkında herhangi bir garanti veremezsiniz. 1, 2, 3 veya 4 karakter genişliğinde olabilir, bu da dize manipülasyonunu zorlaştırır.

UTF-32 zıttır, en fazla belleği kullanır (her karakter 4 bayt genişliğinde sabittir), ancak diğer taraftan, her karakterin bu kesin uzunluğa sahip olduğunu bilirsiniz , bu nedenle dize manipülasyonu çok daha basit hale gelir. Bir dizedeki karakter sayısını, dizenin bayt cinsinden uzunluğundan hesaplayabilirsiniz. Bunu UTF-8 ile yapamazsınız.

UTF-16 bir uzlaşmadır. Çoğu karakterin sabit genişlikli 16 bit değerine sığmasını sağlar . Çince sembolleriniz, müzik notalarınız veya başkaları olmadığı sürece, her karakterin 16 bit genişliğinde olduğunu varsayabilirsiniz. UTF-32'den daha az bellek kullanır. Ama bu bazı açılardan "her iki dünyanın en kötüsüdür". Neredeyse her zaman UTF-8'den daha fazla bellek kullanır ve yine de UTF-8'i (değişken uzunluklu karakterler) rahatsız eden problemden kaçınmaz.

Son olarak, platformun desteklediği şeylerle gitmek genellikle yararlıdır. Windows dahili olarak UTF-16 kullanır, bu nedenle Windows'da bu bariz bir seçimdir.

Linux biraz değişiyor, ancak Unicode uyumlu her şey için genellikle UTF-8 kullanıyorlar.

Yani kısa cevap: Üç kodlama da aynı karakter kümesini kodlayabilir, ancak her karakteri farklı bayt dizileri olarak temsil ederler.


12
Unicode'un her grafik sembolüne benzersiz bir tamsayı atadığını söylemek yanlıştır . Her kod noktasına böyle atar, ancak bazı kod noktaları görünmez kontrol karakterleridir ve bazı grafik sembolleri temsil etmek için birden fazla kod noktası gerektirir .
tchrist

15
@tchrist: evet, yanlış. Sorun şu ki, Unicode'u doğru bir şekilde açıklamak için binlerce sayfa yazmanız gerekiyor. Kodlamalar arasındaki farkı açıklamak için temel konsepti ele almayı umdum
jalf

@jalf lol çok temelde Unicode açıklamak için Unicode Çekirdek Şartname
Justin Ohms

@tchrist Daha spesifik olarak, sağlanan ilkellerden Çince semboller oluşturabilirsiniz (ancak bunlar aynı grafiktedir, bu nedenle bunları kodlamak için gerçek olmayan miktarda alan (disk veya RAM) kullanarak elde edersiniz) yerleşik olanlar.
Kotauskas

44

Unicode bir standarttır ve UTF-x hakkında bazı pratik amaçlar için teknik bir uygulama olarak düşünebilirsiniz:

  • UTF-8 - " boyut optimize edilmiş ": Latin karakter tabanlı veriler (veya ASCII) için en uygun olanıdır, karakter başına sadece 1 bayt alır, ancak boyut buna göre sembol çeşitliliğine göre büyür (ve en kötü durumda karakter başına 6 bayta kadar büyüyebilir)
  • UTF-16 - " denge ": karakter işlemeyi kolaylaştırmak için sabit boyuta sahip ana akım dillerinin mevcut kümesi için karakter başına minimum 2 bayt alır (ancak boyut hala değişkendir ve karakter başına 4 bayta kadar büyüyebilir) )
  • UTF-32 - " performans ": sabit boyutlu karakterlerin (4 bayt) sonucu ancak bellek dezavantajı ile basit algoritmaların kullanılmasına izin verir

«Ana akım diller» dünyanın pek çok yerinde ana akım değil ^^
tuxayo

2
UTF-16 aslında ASCII olmayan grafikler için optimize edilmiştir. Çünkü gerçekten hangi dillerin kullanılacağına bağlı.
tuxayo

@tuxayo tamamen katılıyorum, dünyanın Asya kısmı için Hanzi ve Kanji karakter kümelerini belirtmeye değer.
kale

En iyi cevap olmalı. Bu, buraya gömülemeyecek kadar doğru.
Michal Štein

28

Blog yazımda basit bir açıklama yapmaya çalıştım .

UTF-32

herhangi bir karakteri kodlamak için 32 bit (4 bayt) gerekir . Örneğin, bu şemayı kullanarak "A" karakter kod noktasını temsil etmek için, 32 bit ikili sayıya 65 yazmanız gerekir:

00000000 00000000 00000000 01000001 (Big Endian)

Daha yakından bakarsanız, ASCII şemasını kullanırken en sağdaki yedi bitin aslında aynı bitler olduğunu göreceksiniz. Ancak UTF-32 sabit genişlik şeması olduğundan , üç ek bayt daha eklemeliyiz. Diğer bir deyişle, yalnızca "A" karakterini içeren iki dosyamız varsa, biri ASCII kodlu diğeri UTF-32 kodlu ise, boyutu buna göre 1 bayt ve 4 bayt olacaktır.

UTF-16

Birçok kişi UTF-32 kod noktasını temsil etmek için sabit genişlik 32 bit kullandığından UTF-16'nın sabit genişlik 16 bit olduğunu düşünür. YANLIŞ!

UTF-16'da kod noktası 16 bit veya OR 32 bit olarak gösterilebilir. Yani bu şema değişken uzunluklu kodlama sistemidir. UTF-32'ye göre avantajı nedir? En azından ASCII için, dosyaların boyutu orijinalin 4 katı olmayacaktır (ancak yine de iki kez), bu yüzden hala ASCII geriye dönük olarak uyumlu değiliz.

7 bitlik "A" karakterini temsil etmek için yeterli olduğundan artık UTF-32 gibi 4 yerine 2 bayt kullanabiliriz. Şöyle görünecektir:

00000000 01000001

UTF-8

Doğru tahmin ettiniz .. UTF-8'de kod noktası 32, 16, 24 veya 8 bit kullanılarak temsil edilebilir ve UTF-16 sistemi olarak bu da değişken uzunluklu kodlama sistemidir.

Son olarak "A" yı ASCII kodlama sistemini kullanarak temsil ettiğimiz şekilde temsil edebiliriz:

01001101

UTF-16'nın aslında UTF-8'den daha iyi olduğu küçük bir örnek:

Çince "語" harfini düşünün - UTF-8 kodlaması:

11101000 10101010 10011110

UTF-16 kodlaması daha kısa olsa da:

10001010 10011110

Temsili ve nasıl yorumlandığını anlamak için orijinal yayını ziyaret edin.


19

UTF-8

  • bayt sırası kavramı yok
  • karakter başına 1 ila 4 bayt kullanır
  • ASCII, kodlamanın uyumlu bir alt kümesidir
  • Tamamen kendi kendini senkronize etme, örneğin bir akışın herhangi bir yerinden bırakılan bir bayt en fazla tek bir karakteri bozacaktır
  • hemen hemen tüm Avrupa dilleri karakter başına iki bayt veya daha az olarak kodlanır

UTF-16

  • bilinen bayt sırası ile ayrıştırılmalı veya bayt sırası işareti (BOM) okunmalıdır
  • karakter başına 2 veya 4 bayt kullanır

UTF-32

  • her karakter 4 bayttır
  • bilinen bayt sırası ile ayrıştırılmalı veya bayt sırası işareti (BOM) okunmalıdır

UTF-8, karakterlerin çoğunluğu CJK (Çince, Japonca ve Korece) karakter alanından olmadıkça en fazla yer tasarrufu sağlayacaktır.

UTF-32 karakter baytına göre bir bayt dizisine rastgele erişim için en iyisidir.


UTF-8'de "kendini senkronize etme" nasıl çalışır? 1 bayt ve 2 bayt karakterlere örnek verebilir misiniz?
Koray Tugay

2
@KorayTugay Geçerli daha kısa bayt dizeleri hiçbir zaman daha uzun karakterlerde kullanılmaz. Örneğin, ASCII 0-127 aralığındadır, yani tüm tek baytlık karakterler 0xxxxxxxikili olarak forma sahiptir. Tüm iki baytlık karakterler 110xxxxxikinci bir bayt ile başlar 10xxxxxx. Diyelim ki iki baytlık bir karakterin ilk karakteri kayboldu. Gördüğünüz gibi kısa sürede 10xxxxxxbir önceki olmadan 110xxxxxx, bir bayt kayıp veya bozuk ve atma olduğunu kesin belirleyebilmesi yeniden geçerli bir ilk bayt görene kadar üzerinde ve hareket karakteri (bir sunucu veya ne olursa olsun ya da yeniden isteği onu) .
Chris

1
bir karakterin ofsetine sahipseniz, o karakterin ofsetine sahipsiniz - utf8, utf16 veya utf32 bu durumda aynı şekilde çalışır; yani hepsi bir bayt dizisine karakter ofseti ile rastgele erişimde eşit derecede iyidir. Utf32'nin karakter sayımında utf8'den daha iyi olduğu fikri de tamamen yanlıştır. Bir kod noktası (olduğu değil , bunlar yine bir karakter ile aynı, nefes .. bir Grapheme aynı değildir) utf32 32 bit genişliğinde ve 8 ila 32 utf8 bitlerin ancak karakter birden codepoints, yayılabilir olan insanların utf32'nin utf8 üzerinde olduğunu iddia etmesinin en büyük avantajını yok eder.
Daha net

14

MySQL'de UTF-8 ve UTF-16 arasındaki veritabanı performansını karşılaştırmak için bazı testler yaptım.

Güncelleme Hızları

UTF-8

Resim açıklamasını buraya girin

UTF-16

Resim açıklamasını buraya girin

Uç Hızları

Resim açıklamasını buraya girin

Resim açıklamasını buraya girin

Hızları Sil

Resim açıklamasını buraya girin

Resim açıklamasını buraya girin


14

UTF-32'de tüm karakterler 32 bit ile kodlanır. Avantajı, dizenin uzunluğunu kolayca hesaplayabilmenizdir. Dezavantajı, her ASCII karakteri için fazladan üç bayt harcamanızdır.

UTF-8 karakterleri değişken uzunluktadır, ASCII karakterleri bir baytta (sekiz bit) kodlanır, çoğu batı özel karakteri iki bayt veya üç bayt olarak kodlanır (örneğin € üç bayttır) ve daha egzotik karakterler alabilir dört bayta kadar. Açık dezavantajı, bir priori dize uzunluğunu hesaplayamazsınız. Ancak, Latin (İngilizce) alfabe metnini UTF-32'ye göre kodlamak çok daha az bayt alır.

UTF-16 da değişken uzunluktadır. Karakterler iki bayt veya dört bayt olarak kodlanır. Gerçekten anlamýyorum. Değişken uzunlukta olmanın dezavantajı vardır, ancak UTF-8 kadar yer tasarrufu avantajı yoktur.

Bu üç taneden açıkça UTF-8 en yaygın olanıdır.


Web siteleri geliştirirken neden dizenin uzunluğunu hesaplamak isteyeyim? Web geliştirmede UTF-8 / UTF-16'yı seçmenin herhangi bir avantajı var mı?
Morfidon

"Avantajı, dizenin uzunluğunu kolayca hesaplayabilmenizdir" Uzunluğu kod noktalarının # ile tanımlarsanız, evet, bayt uzunluğunu UTF-32 ile elde etmek için 4'e bölebilirsiniz. Ancak bu çok yararlı bir tanım değildir: karakter sayısıyla ilgili olmayabilir. Ayrıca, normalleştirme, dizedeki kod noktası sayısını değiştirebilir. Örneğin, Fransızca "été" kelimesi, 3 farklı kod noktası uzunluğu ile en az 4 farklı şekilde kodlanabilir.

UTF-16 muhtemelen UTF-8'den daha hızlıdır, aynı zamanda UTF-32 gibi boşa giden bir bellek yoktur.
Michal Štein

6

Geliştirme ortamınıza bağlı olarak, dize veri türünüzü hangi kodlamanın dahili olarak kullanacağını seçme şansınız bile olmayabilir.

Ancak veri depolamak ve veri alışverişi yapmak için, eğer seçiminiz varsa, daima UTF-8 kullanırım. Çoğunlukla ASCII verileriniz varsa, her şeyi kodlayabilirken, size aktarılacak en düşük miktarda veri verir. En az I / O için optimizasyon, modern makinelere gitmenin yoludur.


Muhtemelen, uzay gereksinimlerinden çok daha önemli olan, UTF-8'in endianiteye karşı bağışık olmasıdır. UTF-16 ve UTF-32, kaçınılmaz olarak endianite sorunları ile uğraşmak zorunda kalacak, burada UTF-8 sadece bir sekizli akışıdır.
2018'de

2

Belirtildiği gibi, fark esas olarak altta yatan değişkenlerin boyutudur ve her durumda daha fazla karakterin temsil edilmesine izin vermek için büyür.

Bununla birlikte, yazı tipleri, kodlama ve şeyler çok karmaşıktır (gereksiz mi?), Bu nedenle daha ayrıntılı olarak doldurmak için büyük bir bağlantıya ihtiyaç vardır:

http://www.cs.tut.fi/~jkorpela/chars.html#ascii

Hepsini anlamayı beklemeyin, ancak daha sonra sorun yaşamak istemiyorsanız, olabildiğince erken öğrenmeye değer (ya da sadece sizin için başka birini çözmesini sağlayın).

Paul.


veya fiili standart haline geldiğinden UTF-8'i varsayılan olarak kullanın ve yeni bir sistemin destekleyip desteklemediğini öğrenin. değilse, bu gönderiye geri dönebilirsiniz.
robotik

-2

Kısacası, UTF-16 veya UTF-32 kullanmanın tek nedeni sırasıyla İngilizce ve eski komut dosyalarını desteklemektir.

Herkes web / programlama amaçları için açıkça daha verimli olduğunda neden UTF-8 olmayan kodlama seçti merak ediyordum.

Yaygın bir yanlış anlama - son eklenmiş sayı, kapasitesinin bir göstergesi DEĞİLDİR. Hepsi tam Unicode'u destekler, sadece UTF-8 ASCII'yi tek bir baytla işleyebilir, bu yüzden CPU ve internet üzerinden DAHA verimli / daha az bozulabilir.

Bazı iyi okumalar: http://www.personal.psu.edu/ejp10/blogs/gotunicode/2007/10/which_utf_do_i_use.html ve http://utf8everywhere.org


Neden önerdiğini bilmiyorum, UTF-16 veya UTF-32 kullanmanın İngilizce olmayan metni destekleyeceğinden emin değilim. UTF-8 bunu iyi halledebilir. İngilizce metinde de ASCII olmayan karakterler var. Sıfır genişlikli bir marangoz gibi. Veya kısa bir çizgi. Korkarım, bu cevap çok değer katmıyor.
2018

UTF-8, karakterlerin çoğunluğu UTF-8'de 3 baytlık karakterler olsa bile, HTML dosyalarında hala yaygın olarak kullanıldığından, bu soru aşağı oylamaya eğilimlidir,
Ṃųỻịgǻňạcểơửṩ

@Ingpectable destek en iyi ifade değil, tanıtmak veya daha iyi destek daha doğru olurdu
robotik

Utf8everywhere.org gibi bir sayfa göndermek SO yanıtında yapacağım şey değil.
Michal Štein
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.