Quel est le nombre maximum d'octets pour une codé en UTF-8 du caractère?
Quel est le nombre maximum d'octets pour un seul codé en UTF-8 du caractère?
Je vais crypter les octets d'une Chaîne encodée en UTF-8, et doivent donc être en mesure de déterminer le nombre maximum d'octets pour une codé en UTF-8 Chaîne.
Quelqu'un pourrait-il confirmer le nombre maximal d'octets pour un seul codé en UTF-8 du caractère veuillez
- Vous ne regardez ressources communes, telles que Wikipédia en UTF-8 de l'Article, d'abord ... droit?
- J'ai lu plusieurs articles qui ont donné des réponses mitigées... j'ai effectivement eu l'impression que la réponse est 3, donc je suis très heureux que j'ai demandé
- Je laisserai un lien youtube ici, mettant en vedette Tom Scott Caractères, des Symboles Unicode miracle: goo.gl/sUr1Hf. Vous obtenez d'entendre et de voir comment le tout étant évolué à partir de caractères ASCII codage utf-8.
- Voir aussi le Calcul de la longueur en UTF-8 de Java Chaîne sans encodage pour la longueur de l'informatique exemple de code
Vous devez vous connecter pour publier un commentaire.
Le nombre maximal d'octets par caractère est à 4 selon RFC3629 ce qui a limité la table de caractères à
U+10FFFF
:(La spécification d'origine a permis jusqu'à six octets de codes de caractères pour les points de code passé
U+10FFFF
.)Caractères avec un code de moins de 128 exigera 1 octet seulement, et la prochaine 1920 codes de caractères nécessitent 2 octets seulement. Sauf si vous travaillez avec un langage ésotérique, en multipliant le nombre de caractères par 4 sera une importante surestimation.
Sans plus de contexte, je dirais que le nombre maximal d'octets par caractère en UTF-8 est
réponse: 6 octets
L'auteur de la accepté de répondre correctement a souligné que la "spécification d'origine". C'était valable jusqu'à la RFC 2279 Un. Comme J. Cocoe a souligné dans les commentaires ci-dessous, cela a changé en 2003 avec la RFC 3629 Deux, ce qui limite l'UTF-8 pour l'encodage de 21 bits, qui peut être manipulé avec le schéma de codage à l'aide de quatre octets.
réponse si le recouvrement de tous les caractères unicode: 4 octets
Mais, dans Java <= v7, on parle de 3 octets maximum pour la représentation unicode en UTF-8? C'est parce que l'original de la spécification unicode seulement définie sur la base multilingue de l'avion (BMP), c'est une ancienne version d'unicode, ou sous-ensemble de moderne unicode. Donc
réponse si ce qui représente seulement d'origine unicode, le BMP: 3 octets
Mais, l'OP parle dans l'autre sens. Pas de caractères UTF-8 octets, mais à partir d'octets UTF-8 pour une "Chaîne" d'octets de la représentation. Peut-être l'auteur de la accepté de répondre obtenu à partir du contexte de la question, mais ce n'est pas forcément évident, donc peut confondre le lecteur occasionnel de cette question.
Allant de l'UTF-8 pour l'encodage natif, nous devons nous pencher sur la façon dont la Chaîne "string" est mis en œuvre. Certaines langues, comme le Python >= 3 va représenter chaque caractère entier de points de code, qui permet de 4 octets par caractère = 32 bits pour couvrir le 21 nous avons besoin pour l'unicode, avec un peu de gaspillage. Pourquoi pas exactement 21 bits? Parce que les choses sont plus rapides quand ils sont aligné sur un octet. Certains langages comme Python <= 2 et Java représenter les caractères à l'aide d'un codage UTF-16, ce qui signifie qu'ils ont à utiliser les paires de substitution pour représenter unicode étendu (non BMP). De toute façon c'est toujours 4 octets maximum.
réponse si vous allez en UTF-8> encodage natif: 4 octets
Donc, conclusion finale, 4 est le plus commun du droit de réponse, nous avons donc eu droit. Mais, le kilométrage peut varier.
1F FF FF
, ou 21 bits. Le 0x110000 nombre correspond à la 17 plans de 0x10000 code points chacun.