Question

Le terme multioctets se réfère à un jeu de caractères dont les caractères peuvent - mais ne doivent pas être - plus de 1 octet, (par exemple UTF-8) ou fait-il référence à des jeux de caractères qui sont dans tous les cas plus large que 1 octet (par exemple UTF-16)? En d'autres termes: Que signifie l'expression si quelqu'un parle de jeux de caractères multi-octets

Était-ce utile?

La solution

Le terme est ambigu, mais dans mon travail d'internationalisation, nous généralement évité le terme « jeux de caractères multi-octets » pour désigner encodages l'Unicode. En général, nous avons utilisé le terme uniquement pour les systèmes de codage existants qui avait un ou plusieurs octets pour définir chaque caractère (à l'exception des codages qui nécessitent un seul octet par caractère).

SJIS, jis, EUC-jp, EUC-kr, ainsi que les codages chinois sont généralement inclus.

La plupart des anciens codages, à quelques exceptions près, exigent une sorte de modèle de machine d'état (ou, plus simplement, un modèle d'échange de la page) pour traiter, et se déplaçant vers l'arrière dans un flux de texte est complexe et sujette aux erreurs. UTF-8 et UTF-16 ne souffrent pas de ce problème, en UTF-8 peut être testé avec un masque de bits et UTF-16 peuvent être testés sur une série de paires de substitution, si le déplacement vers l'arrière et vers l'avant dans un document non-pathologique peut être fait en toute sécurité sans complexité majeure.

Quelques anciens codages, pour les langues comme thaï et le vietnamien, ont une partie de la complexité des jeux de caractères multi-octets, mais sont vraiment juste construit sur la combinaison de caractères, et ne sont généralement pas regroupées avec le terme général « multi-octets. »

Autres conseils

  

Qu'est-ce que l'on entend si quelqu'un parle de jeux de caractères multi-octets?

Ce, comme d'habitude, dépend de qui fait parler!

Logiquement, il devrait inclure UTF-8, Shift-JIS, GB etc .: les codages de longueur variable. UTF-16 souvent pas pris en compte dans ce groupe (même si ce genre de est, ce avec les mères porteuses, et certainement il est plusieurs octets lorsque codés en octets via UTF-16LE / UTF-16BE).

Mais Microsoftland le terme serait plus généralement utilisé pour désigner un système par défaut de longueur variable codepage (pour les applications héritées non Unicode, dont il y a malheureusement encore beaucoup). Dans cette utilisation, UTF-8 et ne peut pas être inclus UTF-16LE / UTF-16BE parce que le système codepage sous Windows ne peut pas être réglé sur l'une de ces codages.

En effet, dans certains cas, « MBCS » est pas plus qu'un synonyme pour le système codepage, autrement connu (encore plus trompeusement) comme « ANSI ». Dans ce cas, un jeu de caractères « multi-octets » pourrait en fait être quelque chose d'aussi trivial que CP1252 Europe occidentale, qui utilise un seul octet par caractère!

Mon conseil: utiliser « longueur variable » quand vous voulez dire que, et éviter le terme ambigu « multi-octets »; quand quelqu'un d'autre utilise, vous aurez besoin de demander des éclaircissements, mais généralement quelqu'un avec un fond Windows va parler d'un héritage Asie de l'Est comme codepage CP932 (Shift-JIS) et non UTF.

Tous les jeux de caractères où vous n'avez pas un 1 octet = 1 mappage de caractères. Toutes les variantes Unicode, mais aussi des jeux de caractères asiatiques sont multi-octets.

Pour plus d'informations, je vous suggère de lire cet article de Wikipedia .

Un caractère multi-octets signifie un caractère dont le codage nécessite plus de 1 octet. Cela ne signifie pas pour autant que tous les caractères à l'aide de ce codage particulier auront la même largeur (en termes d'octets). Par exemple:. De caractères UTF-8 et UTF-16 codé peut utiliser plusieurs octets alors que parfois tous caractères UTF-32 codées toujours utiliser 32 bits

Références:

Typiquement, le premier, à savoir UTF-8-like. Pour plus d'informations, consultez encodage largeur variable .

L'ancien -. Bien que le terme « codage de longueur variable » serait plus approprié

Je l'utilise généralement pour faire référence à tout caractère peut ont plus d'un octet par caractère.

  

Un jeu de caractères multi-octets peut être constitué à la fois d'un octet et de deux octets   personnages. Ainsi, une chaîne de caractères multi-octets peut contenir un mélange de   d'un octet et les caractères codés sur deux octets.

Ref: mono-octet et caractères multi-octets Définit

UTF-8 est multi-octets, ce qui signifie que chaque caractère anglais (ASCII) est stockée dans 1 octet tandis que le caractère non anglais comme le chinois, Thai, est stocké en 3 octets. Lorsque vous mélangez chinois / thaï avec l'anglais, comme « ท t », le premier caractère thaï « ท » utilise 3 octets tandis que le second caractère anglais « t » utilise seulement 1 octet. Les gens qui ont conçu le codage multi-octets rendu compte que le caractère anglais ne doit pas être stocké dans 3 octets alors qu'il peut tenir dans 1 octet en raison de la perte d'espace de stockage.

UTF-16 stocke chaque caractère anglais ou non anglais dans une longueur fixe 2 octets il n'est pas multi-octets, mais a appelé un caractère large. Il est très approprié pour les langues chinois / thaï où chaque caractère correspond entièrement à 2 octets, mais l'impression à la sortie de la console utf-8 ont besoin d'une conversion de caractère large au format multi-octets en utilisant wcstombs de fonction ().

UTF-32 stocke chaque caractère dans une longueur fixe de 4 octets, mais personne ne l'utiliser pour stocker le caractère en raison d'une perte d'espace de stockage.

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