6
votes

Java Unicode Où trouver des caractères Unicode N-octet

Je recherche un échantillon de 1 octet, 2 octets, 3 octets, 4 octets, 5 octets et des caractères unicode de 6 octets. Toute lien avec une sorte de référence de tous les différents personnages unicode et à quel point ils sont gros (octets-sages) seraient grandement appréciés. J'espère que cette référence a aussi des points de code tels que \ uxxxxx .


0 commentaires

4 Réponses :


3
votes

5 commentaires

Celles-ci ne me disent pas combien d'octets ces points de code représentent. Où puis-je trouver ça?


@MoHameDamed: Regardez le UTF-8, section de conception article sur Wikipedia. Il vous donnera une correspondance entre la valeur de code de code Unicode et sa longueur dans la représentation UTF-8. C'est le seul codage qui a plus de quatre caractères.


Donc, en d'autres termes, il n'y a pas de 5+ octets ute-8 caractères? Selon l'article Wikipedia, ils se sont arrêtés à 4 heures.


@ Mojoutame, oui, c'est correct. Les caractères codés UTF-8 peuvent contenir théoriquement jusqu'à six octets de long, mais les caractères BMP de 16 bits ne sont que jusqu'à trois octets.


@MoHamed: perl -cs -e -fr imprimer chr (0x101) '| WC -C Imprime 2, Perl -CS -E -E 'Imprimer Chr Chr (0x1020)' | wc -c impression 3, perl -cs -e-imprimer CHR (0x1f608) | WC -C Impressions 4. Ces réponses sont en octets pour l'UTF-8 encodant ces points de code respectifs. Le point de code Unicode le plus élevé est 0x10ffff, mais UTF-8 peut encoder des points de code plus vastes que cela. Par exemple, sur une machine 64 bits: perl -cs -e 'imprimé chr (0xFFFF_FFFF_FFFF_FFFF)' | WC -C rapporte 13 octets.



8
votes

Il n'y a pas de "1 octet, de 2 octets, de 3 octets, de 4 octets, de 5 octets et de caractères unicode de 6 octets".

Vous parlez probablement de représentations UTF-8 des caractères Unicode. De même, les chaînes de Java sont représentées en interne dans l'UTF-16, de sorte que le type Java Char représente une unité de code de 16 bits d'UTF-16, et chaque caractère Unicode peut être représenté par un ou deux Les unités de code et chaque unité de code peuvent être représentées sous forme \ uxxxx dans les littéraux de chaîne (notez que 4 chiffres hexagonales ne sont que 4 chiffres hexagonaux dans ces séquences, car les unités de code sont de 16 bits longs).

Donc, si vous avez besoin d'une référence de caractères Unicode avec leurs représentations UTF-8 et UTF-16, vous pouvez consulter La table à FileFormat.info .

Voir aussi:


2 commentaires

Merci c'est un bon début !!


@MoHameDame Nuur Vous pouvez également consulter ces deux sites: Table de caractères UNICODE qui a une fonction de recherche nette à l'aide des noms descriptifs ou, si vous êtes intéressé par l'ensemble ASCII de base, essayez Tables de recherche



8
votes

Comme indique AXTAVT, le concept de caractères Unicode N-octet n'a pas de sens; En supposant que vous voulez dire UTF-8, une table très simple, qui pourrait vous aider à tester, etc., pourrait être la suivante. Notez que tous les exemples de caractères fonctionnent sur mon navigateur (chrome sur Ubuntu) mais votre kilométrage peut varier en termes d'affichage, de copie / colle, etc. xxx

en théorie, il peut y avoir 5- ou 6 - Valeurs d'octets dans UTF-8, mais l'espace d'adresses 32 bits d'Unicode est limité en réalité à un maximum de 10FFFF de sorte que plus de 4 octets ne sont donc pas nécessaires.

Notez qu'il y a une mise en garde importante ici: Java's char est pas un caractère unicode; C'est une unité de code 16 bits de UTF-16, et il n'est pas rare de voir des flux de données qui traitent un caractère non-BMP (comme U + 1D161 ci-dessus) sous forme de 2 caractères et UTF-8 en conséquence. Par exemple: xxx

Notez que cela a l'effet de apparemment montrant un caractère de 6 octets utf-8, mais cela n'est en fait pas autorisé par UTF-8. UTF-8 doit être le codage des points de code d'origine, pas l'encodage des unités de code UTF-16 qui représente ces points. Cela ne signifie pas que vous ne le voyez pas dans la nature si ...


4 commentaires

Il est incorrect, cassé et stupide de prendre un point de code qui occupe deux morceaux UTF-16 et de faire deux morceaux UTF-8. Vous devez le décoder à un point de code unique et générer un point de code unique en retour. Sinon, vous obtenez la mauvaise réponse


La chose est que ce n'est pas utf-8 quand ils le font. C'est CESU-8, qui est une gaffe si commune que la norme UNICODE a été forcée de le mentionner. Ce n'est pas un UTF, donc ne devrait jamais être utilisé pour un échange de données externe. En particulier, Il n'est pas destiné ni recommandé comme codage utilisé pour l'échange d'informations ouverte . C'est une erreur, une de ces choses muettes que Windows et / ou Java qui ne paient pas l'attention ont tendance à bousiller.


Non, ce n'est pas valide UTF-8. Que j'ai dit dans ma réponse. Vous semblez être très violemment d'accord avec moi. Je ne connaissais pas le CESU-8 TR cependant, bonne information, merci.


Bien sûr, cela n'aide pas que Java a une méthode «EritTF» qui écrit ces ordures. :)



0
votes

pour ceux qui sont après juste les échantillons réels Voici 4 échantillons.

  1. A (1 octets, 0x61)
  2. μ (2 octets, 0xb5)
  3. → (3 octets, 0x2192)
  4. 🐱 (4 octets, 0x1f431)

    https://play.rust-lang.org/ ? Version = Stable & Mode = DEBUG & EDITION = 2018 & GIST = EE0883BAD3B1204F458899EA450A53CF4

    Je ne suis pas totalement sûr pourquoi 0xb5 est 2 octets et 0x2192 est trois. Peut-être que quelqu'un peut expliquer.


0 commentaires