UTF8 vs UTF16 vs char* vs quoi? Quelqu'un expliquer ce gâchis pour moi!
J'ai réussi à la plupart d'ignorer ces caractères multi-octets trucs, mais maintenant, j'ai besoin de faire une INTERFACE utilisateur de travailler, et je sais que mon ignorance dans ce domaine va rattraper avec moi! Quelqu'un peut-il expliquer en quelques paragraphes ou moins juste ce que j'ai besoin de savoir afin que je puisse localiser mes applications? Quels types dois-je utiliser (j'utilise les deux .Net et C/C++, et j'ai besoin de cette réponse pour Unix et Windows).
Vous devez vous connecter pour publier un commentaire.
Découvrez Joel Spolsky de Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!)
MODIFIER 20140523: Aussi, regarder Les personnages, les Symboles et l'Unicode Miracle par Tom Scott sur YouTube - c'est un peu moins de dix minutes, et une merveilleuse explication de la brillante "hack" c'est de l'UTF-8
Un codage de caractères est une séquence de codes que chaque regard d'un symbole à partir d'un jeu de caractères donné. Veuillez voir ce bon article sur Wikipédia sur l'encodage des caractères.
UTF8 (UCS) utilise 1 à 4 octets pour chaque symbole. Wikipédia donne un bon aperçu de la façon dont le multi-octets aperçu des œuvres:
La page vous montre également une bonne comparaison entre les avantages et les inconvénients de chaque type de codage des caractères.
UTF16 (UCS2)
Utilise 2 octets 4 octets pour chaque symbole.
UTF32 (UCS4)
utilise 4 octets toujours pour chaque symbole.
char signifie simplement un octet de données et n'est pas un codage réel. Il n'est pas analogue à UTF8/UTF16/ascii. Un char* pointeur peut se référer à n'importe quel type de données et à n'importe quel encodage.
STL:
À la fois du tsl std::wstring et std::string ne sont pas conçus pour
la longueur variable des codages de caractères comme de l'UTF-8 et UTF-16.
Comment mettre en œuvre:
Prendre un coup d'oeil à la fonction iconv de la bibliothèque. iconv est un personnage puissant de conversion de la bibliothèque utilisée par des projets tels que libxml XML (C analyseur de Gnome)
D'autres excellentes ressources sur le codage des caractères:
Idées reçues suggère que Spolsky l'article manque un couple de points importants.
Cet article est recommandée car elle est plus complète:
L'Unicode® Standard: Une Introduction Technique
Cet article est aussi une bonne introduction: Unicode Bases
Ce dernier, en particulier, donne un aperçu de l'encodage des caractères les formes et les plans pour l'Unicode.
Les différents UTF normes sont des moyens pour coder le code de "points". Un codepoint est l'index de l'Unicode charater ensemble.
Un autre encodage est UCS2 qui est toujours 16 bits, et donc ne prend pas en charge la gamme Unicode.
Bon à savoir également que l'on codepoint n'est pas égal à un caractère. Par exemple un personnage comme å peut être représenté à la fois comme un point de code ou de deux points de code une pour l'une et l'autre pour l'anneau.
De la comparaison de deux chaînes unicode requiert donc de la normalisation pour obtenir la représentation canonique avant comparaison.
Il y a aussi le problème avec les polices. Il y a deux façons de gérer les polices. Soit vous utilisez un gigantesque police de caractères pour tous les caractères Unicode dont vous avez besoin (je pense que les versions récentes de Windows est livré avec un ou deux de ces polices). Ou vous utilisez som bibliothèque capable de combiner les glyphes de diverses polices dédiées à des sous-ensembles de la norme Unicode.