( tr3w | 2011. 05. 11., sze – 17:29 )

Tekintve, hogy a QString belső ábrázolása UTF-16-os, így pontosan ugyanazok a jelek ábrázolhatóak vele mint UTF-8-cal.

A lényeges különbség, hogy UTF-8 esetén csak a latin betűk tárolódnak egy byte-on, de minden más abc betűi 2-4 byte-on tárolódnak, még a magyar abc ékezetes betűinek egy része is. Ami azért gond, mert bár helytakarékos megoldásnak tűnhet így, de cserébe a karakterek indexelése/kezelése sokkal nehezebb. Illetve az általad emlegetett orosz/török/arab nyelvek majd minden karaktere 2-4 byte-os.

Ezzel szemben UTF-16-nál egy betű vagy 2 vagy 4 byte-os lehet. Tehát a latin abc összes betűje 2 byte-ot foglal. Ez pazarlásnak tűnhet, de ezen a 2 byte-on elfér a teljes Basic Multilingual Plane, ami tartalmazza lényegében az összes mai beszélt nyelv teljes abc-jét, az arabtól a kínaiig.
Ebből következik, hogy ha egy figyelmetlen/lusta programozó nem kezeli le a változó hosszú karaktereket, akkor a szoftver működni fog mindaddig, amíg a szoftvert nem használja valaki holt nyelvek, vagy zenei és egyéb jelek feldolgozására.
Plusz az összes a latintól nagy részben különböző abc-jű nyelv kevesebb helyet foglal mint UTF-8-cal.

Az UTF-8 egyetlen valódi előnye, hogy a már létező 8-bites stringeket váró C és egyéb kód esetleg működhet vele, ha az nem törődik sokat a string valódi tartalmával. De az ég világon semmi értelme nem lenne egy UTF-16-os rendszert "visszabutítani". Ha Qt-ből külső 8-bites kódot akarsz használni, akkor meg a toUtf8, fromUtf8 fv a barátod...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o