Question

J'ai surtout réussi à ignorer tous ces éléments de caractères multi-octets, mais je dois maintenant travailler sur l'interface utilisateur et je sais que mon ignorance dans ce domaine va me rattraper! Quelqu'un peut-il expliquer en quelques paragraphes ou moins ce que j'ai besoin de savoir pour pouvoir localiser mes applications? Quels types dois-je utiliser (j’utilise les formats .Net et C / C ++, et j’ai besoin de cette réponse pour Unix et Windows).

Était-ce utile?

La solution

Découvrez le Joindre Spolsky Le minimum absolu que tout développeur de logiciel connaisse absolument et positivement à propos de Unicode et jeux de caractères (sans excuses!)

MODIFIER 20140523 : regardez également Caractères, symboles et le miracle Unicode de Tom Scott sur YouTube: un peu moins de dix minutes et une explication merveilleuse du génial "hack" qu'est UTF-8

Autres conseils

Un codage de caractères consiste en une séquence de codes qui permettent chacun de rechercher un symbole dans un jeu de caractères donné. Veuillez consulter ce bon article sur la Wikipedia sur le codage des caractères .

UTF8 (UCS) utilise 1 à 4 octets. pour chaque symbole. Wikipedia donne un bon aperçu du fonctionnement de la réduction multi-octets:

  
      
  • Le bit le plus significatif d'un caractère à octet unique est toujours 0.
  •   
  • Les bits les plus significatifs du premier octet d'une séquence multi-octets   déterminer la longueur de la séquence.   Ces bits les plus significatifs sont 110   pour les séquences à deux octets; 1110 pour   des séquences de trois octets, et ainsi de suite.
  •   
  • Les octets restants dans une séquence multi-octets ont 10 comme maximum.   bits significatifs.
  •   
  • Un flux UTF-8 ne contient ni l'octet FE ni FF. Cela garantit qu'un   Le flux UTF-8 ne ressemble jamais à un UTF-16   flux commençant par U + FEFF   (Marque d'ordre en octets)
  •   

La page présente également une excellente comparaison entre les avantages et les inconvénients de chaque type de codage de caractères.

UTF16 (UCS2)

Utilise 2 octets à 4 octets pour chaque symbole.

UTF32 (UCS4)

utilise toujours 4 octets pour chaque symbole.

char signifie simplement un octet de données et n'est pas un encodage réel. Ce n'est pas analogue à UTF8 / UTF16 / ascii. Un pointeur char * peut faire référence à tout type de données et à tout codage.

STL:

std :: wstring et std :: string ne sont pas conçus pour codages de caractères de longueur variable tels que UTF-8 et UTF-16.

Comment mettre en œuvre:

Jetez un coup d’œil à la bibliothèque iconv. La iconv est une puissante bibliothèque de conversion de codage de caractères utilisée par des projets tels que libxml (analyseur XML C de Gnome)

Autres ressources intéressantes sur le codage de caractères:

La sagesse reçue suggère que l'article de Spolsky manque quelques points importants.

Cet article est recommandé car plus complet: La norme Unicode®: introduction technique

Cet article constitue également une bonne introduction: Principes de base d'Unicode

Ce dernier en particulier donne un aperçu des formes et des schémas de codage de caractères pour Unicode.

Les différentes normes UTF permettent de coder des "points de code". Un point de code est l'index dans le jeu de caractères Unicode.

Un autre encodage est UCS2, qui est toujours en 16 bits, et ne supporte donc pas la gamme Unicode complète.

Ce qu’il est bon de savoir, c’est aussi qu’un point de code n’est pas égal à un caractère. Par exemple, un caractère tel que & # 229; peut être représenté à la fois comme un point de code ou comme deux points de code, l'un pour a et l'autre pour l'anneau.

La comparaison de deux chaînes unicode nécessite donc une normalisation pour obtenir la représentation canonique avant la comparaison.

Il y a aussi le problème des polices. Il existe deux manières de gérer les polices. Soit vous utilisez une police gigantesque avec des glyphes pour tous les caractères Unicode dont vous avez besoin (je pense que les versions récentes de Windows sont livrées avec une ou deux de ces polices). Ou vous utilisez une bibliothèque capable de combiner des glyphes de différentes polices dédiées à des sous-ensembles du standard Unicode.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top