Suite

Conversion d'une valeur entière en unicode pour l'étiquetage dans QGIS

Conversion d'une valeur entière en unicode pour l'étiquetage dans QGIS


Il est possible de styliser un calque avec des nombres entiers stockés dans un fichier de formes, puis de choisir un symbole dans une police.

J'aimerais utiliser le moteur d'étiquette à la place, car je suis plus flexible, par exemple je peux faire pivoter l'étiquette.

Est-il possible d'étiqueter une couche de points avec des nombres Unicode stockés sous forme d'entiers dans un fichier de formes ?


J'ai pu le faire avec l'éditeur de fonction. C'est le code :

""" convertit les valeurs entières du fichier de formes en valeurs Unicode Important : aucune valeur supérieure à 256 n'est autorisée ! Pour dkmSSB, définissez une requête pour supprimer les valeurs supérieures à 200. Ces valeurs ne sont utilisées que pour l'étiquetage. """ de qgis.core importer de qgis.gui import @qgsfunction(args=1, group="Custom") def INTtoUNICODE(values, feature, parent): value = values[0] return chr(value)

Choisissez ensuite des fonctions personnalisées :INTversUNICODE("Nom du champ")


Les chaînes Unicode peuvent être encodées en chaînes simples de différentes manières, selon l'encodage que vous choisissez :

Si vous vous retrouvez avec du texte contenant des caractères non ASCII, vous devez vous renseigner sur Unicode : ce que c'est, comment il fonctionne et comment Python l'utilise.

Unicode est un gros sujet. Heureusement, vous n'avez pas besoin de tout savoir sur Unicode pour pouvoir résoudre des problèmes du monde réel avec : quelques notions de base suffisent. Tout d'abord, vous devez comprendre la différence entre les octets et les caractères. Dans les langages et les environnements plus anciens centrés sur l'ASCII, les octets et les caractères sont traités comme la même chose. Puisqu'un octet peut contenir jusqu'à 256 valeurs, ces environnements sont limités à 256 caractères. Unicode, en revanche, contient des dizaines de milliers de caractères. Cela signifie que chaque caractère Unicode prend plus d'un octet, vous devez donc faire la distinction entre les caractères et les octets.

Les chaînes Python standard sont en réalité des chaînes d'octets, et un caractère Python est en réalité un octet. Les autres termes pour le type Python standard sont « chaîne de 8 bits » et « chaîne simple ». Dans cette recette, nous les appellerons chaînes d'octets, pour vous rappeler leur orientation par octet.

Inversement, un caractère Python Unicode est un objet abstrait assez grand pour contenir le caractère, analogue aux entiers longs de Python. Vous n'avez pas à vous soucier de la représentation interne, la représentation des caractères Unicode ne devient un problème que lorsque vous essayez de les envoyer à une fonction orientée octet, telle que la méthode d'écriture pour les fichiers ou la méthode d'envoi pour les sockets réseau. À ce stade, vous devez choisir comment représenter les caractères sous forme d'octets. La conversion d'Unicode en chaîne d'octets est appelée codage la chaîne. De même, lorsque vous chargez des chaînes Unicode à partir d'un fichier, d'un socket ou d'un autre objet orienté octet, vous devez décoder les chaînes des octets aux caractères.

Il existe de nombreuses façons de convertir des objets Unicode en chaînes d'octets, chacune étant appelée un codage . Pour diverses raisons historiques, politiques et techniques, il n'existe pas un seul codage « correct ». Chaque encodage a un nom insensible à la casse, et ce nom est passé à la méthode de décodage en tant que paramètre. En voici quelques-uns que vous devez connaître :

Le UTF-8 l'encodage peut gérer n'importe quel caractère Unicode. Il est également rétrocompatible avec l'ASCII, donc un fichier ASCII pur peut également être considéré comme un fichier UTF-8, et un fichier UTF-8 qui utilise uniquement des caractères ASCII est identique à un fichier ASCII avec les mêmes caractères. Cette propriété rend UTF-8 très rétrocompatible, en particulier avec les anciens outils Unix. UTF-8 est de loin l'encodage dominant sur Unix. Sa principale faiblesse est qu'elle est assez inefficace pour les textes orientaux.

Le UTF-16 l'encodage est favorisé par les systèmes d'exploitation Microsoft et l'environnement Java. Il est moins efficace pour les langues occidentales mais plus efficace pour les langues orientales. Une variante d'UTF-16 est parfois connue sous le nom d'UCS-2.

Le ISO-8859 séries d'encodages sont des surensembles ASCII de 256 caractères. Ils ne peuvent pas prendre en charge tous les caractères Unicode, ils ne peuvent prendre en charge que certaines langues ou familles de langues particulières. ISO-8859-1, également connu sous le nom Latin-1 , couvre la plupart des langues d'Europe occidentale et d'Afrique, mais pas l'arabe. ISO-8859-2, également connu sous le nom Latin-2 , couvre de nombreuses langues d'Europe de l'Est telles que le hongrois et le polonais.

Si vous voulez pouvoir encoder tous les caractères Unicode, vous voudrez probablement utiliser UTF-8. Vous n'aurez probablement besoin de traiter les autres encodages que lorsque vous recevrez des données dans ces encodages créés par une autre application.


Des points de code abstraits aux bits réels : encodages UTF-8 et UTF-16

Un point de code est un concept abstrait, cependant. Pour un programmeur, la question est : Comment ces points de code Unicode sont-ils représentés concrètement à l'aide de bits informatiques ? La réponse à cette question conduit directement au concept d'encodage Unicode. Fondamentalement, un codage Unicode est une manière particulière et bien définie de représenter les valeurs de point de code Unicode en bits. La norme Unicode définit plusieurs codages, mais les plus importants sont UTF-8 et UTF-16, qui sont tous deux des codages à longueur variable capables de coder tous les « caractères » Unicode possibles ou, mieux, les points de code. Par conséquent, les conversions entre ces deux encodages sont sans perte : aucun caractère Unicode ne sera perdu au cours du processus.

UTF-8, comme son nom l'indique, utilise des unités de code à 8 bits. Il a été conçu avec deux caractéristiques importantes à l'esprit. Premièrement, il est rétrocompatible avec l'ASCII, ce qui signifie que chaque code de caractère ASCII valide a la même valeur d'octet lorsqu'il est encodé en UTF-8. En d'autres termes, un texte ASCII valide est automatiquement un texte codé en UTF-8 valide.

Deuxièmement, étant donné que le texte Unicode encodé en UTF-8 n'est qu'une séquence d'unités d'octets de 8 bits, il n'y a pas de complication endianness. L'encodage UTF-8 (contrairement à UTF-16) est de conception neutre en dian. Il s'agit d'une caractéristique importante lors de l'échange de texte entre différents systèmes informatiques pouvant avoir des architectures matérielles différentes avec un endian différent.

Compte tenu des deux caractères Unicode que j'ai mentionnés précédemment, la lettre majuscule C (code point U+0043) est codée en UTF-8 en utilisant le seul octet 0x43 (43 hexadécimal), qui est exactement le code ASCII associé au caractère C (selon la rétrocompatibilité UTF-8 avec ASCII). En revanche, l'idéogramme japonais 学 (code point U+5B66) est codé en UTF-8 sous la forme de la séquence de trois octets 0xE5 0xAD 0xA6.

UTF-8 est l'encodage Unicode le plus utilisé sur Internet. Selon les statistiques récentes de W3Techs disponibles sur bit.ly/1UT5EBC, UTF-8 est utilisé par 87 pour cent de tous les sites Web analysés.

UTF-16 est essentiellement le codage standard de facto utilisé par les API Windows Unicode. UTF-16 est également l'encodage Unicode « natif » dans de nombreux autres systèmes logiciels. Par exemple, Qt, Java et la bibliothèque International Components for Unicode (ICU), pour n'en nommer que quelques-uns, utilisent le codage UTF-16 pour stocker les chaînes Unicode.

UTF-16 utilise des unités de code 16 bits. Tout comme UTF-8, UTF-16 peut encoder tous les points de code Unicode possibles. Cependant, alors que UTF-8 code chaque point de code Unicode valide en utilisant une à quatre unités d'octets de 8 bits, UTF-16 est, d'une certaine manière, plus simple. En fait, les points de code Unicode sont codés en UTF-16 en utilisant seulement une ou deux unités de code 16 bits. Cependant, le fait d'avoir des unités de code plus grandes qu'un seul octet implique des complications liées à l'endian : en fait, il existe à la fois un UTF-16 big-endian et un UTF-16 little-endian (alors qu'il n'y a qu'un seul codage UTF-8 neutre endian).

Unicode définit un concept de plan comme un groupe continu de 65 536 (2 16 ) points de code. Le premier plan est identifié comme plan 0 ou plan multilingue de base (BMP). Les caractères de presque toutes les langues modernes et de nombreux symboles sont situés dans le BMP, et tous ces caractères BMP sont représentés en UTF-16 à l'aide d'une seule unité de code à 16 bits.

Les caractères supplémentaires sont situés dans des plans autres que le BMP, ils incluent des symboles pictographiques comme Emoji et des scripts historiques comme les hiéroglyphes égyptiens. Ces caractères supplémentaires en dehors du BMP sont codés en UTF-16 à l'aide de deux unités de code à 16 bits, également appelées paires de substitution.

La lettre majuscule C (U+0043) est codée en UTF-16 sous la forme d'une seule unité de code de 16 bits 0x0043. L'idéogramme (U+5B66) est codé en UTF-16 en tant qu'unité de code unique de 16 bits 0x5B66. Pour de nombreux caractères Unicode, il existe une correspondance directe et immédiate entre leur représentation « abstraite » du point de code (telle que U+5B66) et leur codage UTF-16 associé en hexadécimal (par exemple, le mot de 16 bits 0x5B66).

Pour s'amuser un peu, jetons un œil à quelques symboles pictographiques. Le caractère Unicode « bonhomme de neige » (, U+2603) est codé en UTF-8 sous la forme d'une séquence de trois octets : 0xE2 0x98 0x83 cependant, son codage UTF-16 est l'unité unique de 16 bits 0x2603. Le caractère Unicode « chope à bière » (, U+1F37A), qui est situé à l'extérieur du BMP, est codé en UTF-8 par la séquence de quatre octets 0xF0 0x9F 0x8D 0xBA. Son codage UTF-16 utilise à la place deux unités de code 16 bits, 0xD83C 0xDF7A, un exemple de paire de substitution UTF-16.


Différence entre OrdinalEncoder et LabelEncoder

Je parcourais la documentation officielle de scikit-learn learn après avoir lu un livre sur le ML et je suis tombé sur la chose suivante :

Dans la documentation, il est donné à propos de sklearn.preprocessing.OrdinalEncoder() alors que dans le livre, il a été donné à propos de sklearn.preprocessing.LabelEncoder() , lorsque j'ai vérifié leur fonctionnalité, cela m'a semblé la même chose. Quelqu'un peut-il me dire la différence entre les deux s'il vous plaît ?

3 réponses

Vous utilisez l'encodage ordinal pour préserver l'ordre des données catégorielles, c'est-à-dire froid, chaud, chaud, faible, moyen, élevé. Vous utilisez un codage d'étiquette ou un codage chaud pour les données catégorielles, où il n'y a pas d'ordre dans les données, c'est-à-dire chien, chat, baleine. Vérifiez ce post sur le support. Il explique bien ces notions.

Répondu il y a 8 mois par Piotr Rarus - Réintégrer Monica avec 1 vote positif

En ce qui concerne les différences entre OrdinalEncoder et LabelEncoder la mise en oeuvre, la réponse acceptée mentionne la forme des données : ( OrdinalEncoder pour la forme des données 2D (n_samples, n_features) , LabelEncoder est pour les données 1D : pour la forme (n_samples,) )

C'est pourquoi un OrdinalEncoder obtiendrait une erreur :

. si vous essayez de tenir sur des données 1D : OrdinalEncoder().fit(['a','b'])

Cependant, une autre différence entre les encodeurs est la nom de leur paramètre appris

Notez les différences d'ajustement entre LabelEncoder et OrdinalEncoder , et les différences dans les valeurs de ces paramètres appris. LabelEncoder.classes_ est 1D, tandis que OrdinalEncoder.categories_ est 2D.

D'autres encodeurs qui fonctionnent en 2D, y compris OneHotEncoder , utilisent également la propriété categories_

Plus d'informations ici sur le dtype <U1 (little-endian , Unicode, 1 octet c'est-à-dire une chaîne de longueur 1)

Dans les commentaires de ma réponse, Piotr n'est pas d'accord Piotr souligne la différence entre ordinal codage et étiquette codage plus généralement.

  • L'encodage ordinal est bon pour variables ordinales (où l'ordre compte, comme le froid, le chaud, le chaud)
  • vs un non-ordinal (aka nominal) variable (où l'ordre n'a pas d'importance, comme blonde , brune )

C'est un excellent concept, mais cette question porte sur les classes / la mise en œuvre de sklearn. Il est intéressant de voir comment la mise en œuvre ne correspond pas aux concepts spécifiquement si vous voulez ordinal codage comme le décrit Piotr (l'ordre est préservé) vous devez faire l'encodage ordinal vous-même (ni OrdinalEncoder ni LabelEncoder ne peuvent déduire l'ordre).

En ce qui concerne la mise en œuvre, il semble que LabelEncoder et OrdinalEncoder aient comportement cohérent jusqu'au entiers choisis. Ils tous les deux attribuer des nombres entiers en fonction de ordre alphabétique. Par exemple:

Remarquez comment tous les deux encodeurs affectés d'entiers dans ordre alphabétique 'c'<'h'<'w'.

Mais cette partie est importante : Remarquez comment ni l'encodeur a obtenu le ordre "réel" correct (c'est-à-dire que l'ordre réel doit refléter la température, où l'ordre est 'froid'<'chaud'<'chaud') basé sur l'ordre "réel", la valeur 'chaud' aurait reçu l'entier 1.

Dans le billet de blog référencé par Piotr, l'auteur n'utilise même pas OrdinalEncoder(). Atteindre codage ordinal l'auteur le fait manuellement : mappe chaque température à un entier d'ordre "réel", en utilisant un dictionnaire comme <'cold':0, 'warm':1, 'hot':2> :

Reportez-vous à ce code en utilisant Pandas, où nous devons d'abord assigner l'ordre réel de la variable à travers un dictionnaire. Bien que ce soit très simple, mais cela nécessite un codage pour indiquer les valeurs ordinales et quel est le mappage réel du texte en entier selon l'ordre.

En d'autres termes, si vous vous demandez si vous devez utiliser OrdinalEncoder , veuillez noter OrdinalEncoder peut ne pas réellement fournir un "encodage ordinal" comme vous l'attendez!

Répondu il y a 8 mois par Le pois rouge avec 5 votes positifs

Afaik, les deux ont la même fonctionnalité. Une petite différence est l'idée derrière. OrdinalEncoder sert à convertir les entités, tandis que LabelEncoder sert à convertir la variable cible.

C'est pourquoi OrdinalEncoder peut ajuster des données qui ont la forme de (n_samples, n_features) tandis que LabelEncoder ne peut ajuster que des données qui ont la forme de (n_samples,) (bien que dans le passé, on utilisait LabelEncoder dans la boucle pour gérer ce qui est devenu le travail d'OrdinalEncoder maintenant)


7 réponses 7

Comme d'autres l'ont dit, utilisez ieee.numeric_std , jamais ieee.std_logic_unsigned , qui n'est pas vraiment un package IEEE.

Cependant, si vous utilisez des outils prenant en charge VHDL 2008, vous pouvez utiliser le nouveau package ieee.numeric_std_unsigned , qui fait essentiellement en sorte que std_logic_vector se comporte comme non signé.

De plus, comme je ne l'ai pas vu explicitement, voici un exemple de code réel pour convertir d'un entier (non signé) en un std_logic_vector :

Comme le dit LoneTech, utilisez ieee.numeric_std est votre ami. Vous pouvez convertir un std_logic_vector en un entier , mais vous devrez d'abord le convertir en tant que signé ou non signé (car le compilateur n'a aucune idée de ce que vous voulez dire). Le VHDL est un langage fortement typé. J'ai écrit plus sur ce sujet sur mon blog

Fondamentalement, je changerais votre convertisseur 7seg pour qu'il prenne un entier (ou en fait un naturel , étant donné qu'il ne traitera que des nombres positifs) - la conversion est alors une simple recherche de tableau. Configurez un tableau constant avec les conversions et indexez-le simplement avec l'entier que vous utilisez sur l'entité comme entrée.

Comme le dit la réponse principale, la méthode recommandée est la suivante :

Cependant, je voudrais expliquer pourquoi cela est recommandé et pourquoi VHDL a une manière apparemment si compliquée de convertir des entiers en std_logic_vectors.

Cela dépend de la façon dont ces types sont perçus par les outils.

Un standard_logic_vector est littéralement un groupe de 1 ou de 0. J'ai 10001. C'est quel numéro ? En fait ça dépend. Est-il signé ou non signé ? Ce SLV ne sait pas ou ne s'en soucie pas. Combien de bits ? Eh bien, combien de temps dure votre SLV ?

Un entier est signé, et généralement 32 bits (si je me souviens bien).

Étape 1 : rendre mon entier plus court et non signé. C'est cette partie :

"J'ai cet entier, je veux qu'il ne soit pas signé, et je veux qu'il tienne dans la longueur de mon SLV."

Étape 2 : Ensuite, prenez ces bits et utilisez-les pour piloter le fichier my_slv.

"Prenez ces morceaux et utilisez-les pour conduire mon slv"

(Une note sur la terminologie. A <= B en VHDL est lu à haute voix comme "A est entraîné par B")

En venant d'un milieu de programmation traditionnel, il est très facile de rester coincé dans une façon de penser en programmation. Mais en VHDL, le code que vous écrivez a des implications physiques dans le matériel. Savoir pourquoi cette méthode fonctionne et est recommandée est un pas de plus vers la réflexion sur ce que vous écrivez en termes de matériel.

Astuce bonus : les fonctions préfixées par to_ sont celles qui raccourcissent/changent les opérandes. Ils les rendent non signés ou d'une certaine longueur ou les deux. C'est pourquoi to_unsigned vous oblige à spécifier la longueur. Les fonctions sans to_ (straight std_logic_vector(. ) dans cet exemple) sont utilisées lorsque les types sont déjà directement compatibles. "Prenez ces morceaux et remplissez-les de ce type, aucune modification n'est requise". Ceux-ci n'ont pas d'argument de longueur car les deux côtés sont déjà les mêmes. Donc, lorsque je construis des choses comme celle-ci, je n'ai pas besoin de chercher, je pense juste à la façon dont je modifie les données.


4 Les champs

Nous donnons maintenant deux listes des champs de la base de données Unihan. Le premier est une liste alphabétique, avec des informations sur le contenu et la syntaxe du champ. La seconde est une liste des champs par la version de la norme Unicode dans laquelle ils ont été trouvés pour la première fois.

4.1 Liste alphabétique

Pour chaque champ, nous donnons les informations suivantes dans la liste alphabétique : son Biens tag, son Unicode Statut, son Catégorie tel que défini ci-dessus, la version Unicode dans laquelle il a été Introduit, son Délimiteur, son Syntaxe, et son La description.

Le Biens name est la balise utilisée dans la base de données Unihan pour marquer les instances de ce champ.

L'Unicode Statut est soit Normatif, Informatif, ou alors Provisoire, selon qu'il s'agit d'une partie normative de la norme, d'une partie informative de la norme ou de l'une ou l'autre. Nous pouvons également inclure Obsolète comme Statut Unicode si le champ ne doit plus être utilisé.

Les champs qui autorisent plusieurs valeurs ont un Délimiteur défini comme « espace ». Les champs qui n'ont pas plusieurs valeurs (comme les champs source IRG) sont définis comme « N/A ». Certains champs n'ont actuellement pas plusieurs valeurs dans les données, mais pourraient le faire à l'avenir.

Pour la plupart des champs avec plusieurs valeurs, l'ordre des valeurs est arbitraire et n'a pas de signification particulière. L'ordre le plus courant dans de tels cas est alphabétique. Par exemple, consultez le champ kCantonais.

Cependant, pour certains champs, l'ordre des valeurs peut être significatif dans de tels cas, la signification est spécifiée dans la description du champ. Par exemple, consultez le champ kMandarin. Dans les versions ultérieures de la base de données de caractères Unicode, un champ peut passer d'un ordre arbitraire à un ordre spécifié.

La validation se fait comme suit : L'entrée est divisée en sous-entrées à l'aide de la Délimiteur (si défini), et chaque sous-entrée convertie en formulaire de normalisation D (NFD). La valeur est valide si et seulement si chaque sous-entrée normalisée correspond au champ Syntaxe expression régulière. Notez que la valeur d'un champ donné Syntaxe n'est pas garantie d'être stable et peut changer à l'avenir.

Finalement, le La description contient non seulement une description de ce que contient le champ, mais également des informations sur la source, les limites connues, la méthodologie utilisée pour dériver les données, etc.

Les chiffres comptables sont utilisés en Asie de l'Est pour prévenir la fraude. Parce qu'un nombre comme dix (十) est facilement transformé en mille (千) d'un coup de pinceau, les documents monétaires utiliseront souvent une forme comptable du chiffre dix (comme 拾) à leur place.

Une description complète de jyutping peut être trouvée sur https://en.wikipedia.org/wiki/Jyutping. Les principales différences entre le jyutping et la romanisation de Yale précédemment utilisée sont :

1) Jyutping utilise toujours des numéros de tonalité et ne distingue pas les tonalités tombantes hautes et les tonalités de haut niveau.
2) Jyutping écrit toujours un long a comme "aa".
3) Jyutping utilise "oe" et "eo" pour la voyelle Yale "eu".
4) Jyutping utilise "c" au lieu de "ch", "z" au lieu de "j" et "j" au lieu de "y" comme initiales.
5) Une initiale non nulle est toujours écrite explicitement (donc "jyut" dans jyutping au lieu du "yut" de Yale).

Les prononciations cantonaises sont triées par ordre alphabétique et non par ordre de fréquence.

N.B., le dialecte hongkongais du cantonais est en train d'abandonner le NG- initial avant les finales non nulles. Tout mot avec un NG- initial peut en fait être prononcé sans celui-ci, selon le locuteur et les circonstances. De nombreux mots avec une initiale nulle peuvent également être prononcés avec une initiale NG-. De même, de nombreux locuteurs utilisent un L- initial pour les mots précédemment prononcés avec un N- initial.

Les données cantonaises sont dérivées des sources suivantes :

Casey, G. Hugh, S.J. Dix mille caractères : un dictionnaire analytique. Hong Kong : Kelley et Walsh, 1980 (kPhonetic).

Cheung Kwan-hin et Robert S. Bauer, The Representation of Cantonese with Chinese Characters, Journal of Chinese Linguistics Monograph Series Number 18, 2002.

Roy T. Cowles, A Pocket Dictionary of Cantonese, Hong Kong : University Press, 1999 (kCowles).

Sidney Lau, A Practical Cantonese-English Dictionary, Hong Kong: Government Printer, 1977 (kLau).

Bernard F. Meyer et Theodore F. Wempe, Student’s Cantonese-English Dictionary, Maryknoll, New York : Catholic Foreign Mission Society of America, 1947 (kMeyerWempe).

, éd.廣州音字典, Hong Kong : Joint Publishing (H.K.) Co., Ltd., 1989.

, éd.商務新詞典, Hong Kong : La Presse Commerciale, 1991.

Ainsi, « 1187.060 » indique le sixième caractère à la page 1187. Un caractère qui ne figure pas dans ce dictionnaire mais auquel une position entre le 6e et le 7e caractère à la page 1187 est attribuée à des fins de tri aurait le code « 1187.061 »

Les définitions spécifiques aux langues non chinoises ou aux dialectes chinois autres que le mandarin moderne sont marquées, par exemple, (Cant.) ou (J).

Les données ici se composent d'un nombre décimal suivi d'une lettre A à K, de la lettre P ou d'un astérisque. Le nombre décimal donne le nombre Soothill pour la phonétique du personnage, et la lettre est une indication de fréquence approximative, avec A indiquant les 500 idéogrammes les plus courants, B les cinq cents suivants, et ainsi de suite.

P est utilisé par Fenn pour indiquer un caractère rare inclus dans le dictionnaire uniquement parce que c'est l'élément phonétique dans d'autres caractères.

Un astérisque est utilisé à la place d'une lettre en position finale pour indiquer un caractère qui appartient à l'un des groupes phonétiques de Soothill mais qui ne se trouve pas dans le dictionnaire de Fenn.

Le système à quatre coins attribue à chaque caractère un code à quatre chiffres de 0 à 9. Le chiffre est dérivé de la « forme » des quatre coins du caractère (en haut à gauche, en haut à droite, en bas à gauche, en bas à droite ). Un cinquième chiffre facultatif peut être utilisé pour distinguer davantage les caractères. Le cinquième chiffre est dérivé de la forme au centre ou dans la région du caractère immédiatement à gauche du quatrième coin.

Le système des quatre coins n'est plus utilisé que rarement. Des descriptions complètes sont disponibles en ligne, par exemple, à l'adresse http://en.wikipedia.org/wiki/Four_corner_input.

Cet ensemble de données contient un total de 7 405 enregistrements. Les références sont données sous la forme DDDDa('), où "DDDD" est un nombre défini dans la plage [0001..1260] complété par des zéros à 4 chiffres, "a" est une lettre dans la plage [a..z ] (à l'exception de « w »), éventuellement suivi de l'apostrophe ('). Les données à partir desquelles cette table de mappage est extraite contiennent un total de 10 023 références. Les références aux formulaires d'inscription ont été omises.

Changements depuis la version initiale :
Ajouté : [U+25053] : 0995m (2009-01-01)
Ajouté : [U+65d6] : 0001l' (2008-11-17).

22-déc-2003 : Version initiale. Les 32 références suivantes sont des formulaires non codés : 0059k, 0069y, 0079d, 0275b, 0286a, 0289a, 0289f, 0293a, 0325a, 0389o, 0391h, 0392s, 0468h, 0480a, 0516a, 0526o, 0566g', 0642y, 0661a, 0739i, 0775b, 0837h, 0893r, 0969a, 0969e, 1019e, 1062b, 1112d, 1124l, 1129c', 1144a, 1144b. Dans certains cas, une variante de mappage a été substituée dans la table de mappage, dans d'autres cas, la référence est omise.

Karlgren, Klas Bernhard Johannes 高本漢 (1889–1978) : 2000. Grammata Serica Recensa Electronica. Version électronique de GSR, comprenant des index, un canon syllabique et des images du texte original de Karlgren (1957). Préparé pour le projet STEDT http://stedt.berkeley.edu/ par Richard Cook basé en partie sur le travail de Tor Ulving et Ferenc Tafferner (voir ci-dessous), utilisé avec autorisation. Berkeley : Université de Californie.

Karlgren 1957. Grammata Serica Recensa. Publié pour la première fois dans le Bulletin du Musée des antiquités d'Extrême-Orient (BMFEA) n° 29, Stockholm, Suède. Réimprimé par Elanders Boktrycker Aktiebolag, Kungsbacka, [1972]. Réimprimé également par SMC Publishing Inc., Taipei, Taiwan, ROC, [1996]. ISBN : 957-638-269-6.

Karlgren 1940. Grammata Serica: Script and Phonetics in Chinese and Sino-Japanese 《中日漢字形聲論》Zhong-Ri Hanzi Xingsheng Lun [Une étude des caractères composés sémantiques-phonétiques sino-japonais :] BMFEA No. 12. Réimprimé, Taipei : Maison d'édition Ch'eng-Wen, [1966].

Les références de caractères sont données sous la forme « ABCDE.XYZ », dans laquelle : « A » est le numéro de volume [1..8] « BCDE » est le numéro de page rempli de zéros [0001..4809] « XY » est le numéro complété par des zéros du caractère de la page [01..32] « Z » est « 0 » pour un caractère actuellement présent dans le dictionnaire, et supérieur à 0 pour un caractère affecté d'une position « virtuelle » dans le dictionnaire. Par exemple, 53024.060 indique un caractère HDZ réel, le 6e caractère de la page 3 024 du volume 5 (c'est-à-dire 籉 [U+7C49]). A noter que les références du Volume 8 « BCDE » sont comprises dans la plage [0008..0044] inclusivement, faisant référence à la pagination de l'« Annexe de l'Addendum » à la fin de ce volume (à partir de la p. 5746).

Le premier caractère affecté à une position virtuelle donnée a un index se terminant par 1, le second affecté à la même position virtuelle a un index se terminant par 2 et ainsi de suite.

Cet ensemble de données contient un total de 56098 références HDZ, dont 54729 sont des références de caractères HDZ réelles (les positions sont données pour toutes les entrées de tête HDZ, y compris les unifications internes à la source), et 1369 sont des positions de caractères virtuels (voir note ci-dessous).

Un total de 55818 caractères Unihan distincts se voient attribuer des mappages dans ces données. En raison des unifications internes à la source IRG, un caractère donné peut avoir plus d'une référence HDZ. Les unifications internes à la source sont de deux types : (1) des unifications de variantes graphiques (2) des unifications d'entrées de tête en double.

La vérification de toutes les références a été effectuée principalement sur la base de recoupements de trois versions des données de référence : (1) la source d'impression originale (2) le champ « kIRGHanyuDaZidian » de la base de données Unihan (version 3.1.1d1) (3 ) « HDZ.txt », initialement produit et corrigé pour l'Institut de technologie de l'information de l'Academia Sinica (Laboratoire de traitement de documents). De plus, les données ont été vérifiées par rapport aux champs « kHanYu » et « kAlternateHanYu » de la base de données Unihan (version 3.1.1d1), que le présent ensemble de données remplace.

Les validations de valeur de chaîne, de longueur de chaîne, de clé composée, de nombre de champs et de total de pages ont toutes été effectuées. Au total, 578 omissions/erreurs dans la source (2) ont été identifiées/corrigées. Toutes les erreurs restantes seront probablement liées aux positions virtuelles ou à l'ordre des caractères réels au sein d'une page donnée. Il est peu probable que des erreurs entre les sauts de page persistent. D'éventuelles désunifications futures des unifications internes à la source nécessiteront une mise à jour de l'USV pour certaines références. Les mappages d'unification interne à la source (USV en double) ne doivent en aucun cas être supprimés de cet ensemble de données.

Remarque : La source (3) a contribué uniquement aux références de caractères HDZ réelles au processus de vérification, tandis que la source (2) a contribué à toutes les positions virtuelles. Il semble que les compilateurs de la source (2) attribuent généralement des positions virtuelles en fonction du nombre de traits, bien que parfois la position virtuelle rapproche le caractère virtuel du caractère HDZ réel dont il est une variante, sans tenir compte du nombre réel de traits.

-- Informations bibliographiques pour la source imprimée --

<Hanyu Da Zidian> [‘Grand dictionnaire de caractères chinois’ (en 8 volumes)]. XU Zhongshu (rédacteur en chef). Wuhan, province du Hubei (RPC) : Hubei and Sichuan Dictionary Publishing Collectives, 1986-1990. ISBN : 7-5403-0030-2/H.16.

Cet ensemble de données contient un total de 3799 enregistrements. (Les données originales fournies à Unihan 2003/02/04 contenaient un total de 3800 enregistrements, y compris 〇 [U+3007] líng « IDEOGRAPHIC NUMBER ZERO », non inclus dans Unihan car il ne s'agit pas d'un IDÉOGRAPHE UNIFIÉ CJK.)

Chaque entrée est composée de deux éléments de données.

La ou les prononciations Hanyu Pinyin (HYPY) du personnage.

Immédiatement après la prononciation, une chaîne numérique apparaît entre parenthèses : par ex. dans "ā(392)", la chaîne numérique "392" indique la somme totale des fréquences des prononciations du caractère telles qu'elles sont données dans HYPLCD.

Lorsqu'il existe plusieurs prononciations, celles-ci sont triées par fréquence décroissante et les éléments de la liste sont délimités par des « espaces ».

Les données XDHYPLCD ici pour le chinois standard moderne (Putonghua) couvrent 4 genres ("Actualités", "Scientifique", "Famille" et "Littérature"), et ont été dérivées d'un corpus de 1 807 389 caractères. Voir ce texte pour plus d'informations.

Les 8548 entrées (8586 avec des variantes d'écriture) de la p. 491-656 de XDHYPLCD ont été saisies à la main et relues de 1994/08/04 au 1995/03/22 par Richard Cook.

La date de sortie actuelle ci-dessus reflète la date de la dernière vérification.

La transcription HYPY des données de ce communiqué a été semi-automatisée et corrigée à la main en 1995, en partie sur la base des données fournies par Ross Paterson (Department of Computing, Imperial College, Londres).

Tom Bishop http://www.wenlin.com doit également remercier pour son aide précoce dans la relecture de ces données.

Le jeu de caractères utilisé pour cette numérisation de HYPLCD (un texte « simplifié » de la RPC continentale) était (Mac OS 7-9) GB 2312-80 (plus 嗐).

Ces données ont été converties en Big5 (plus 腈), et les versions GB et Big5 ont été converties séparément en Unicode 4.0, puis fusionnées, ce qui a donné les 3800 enregistrements de la version originale. Les données de fréquence pour les mots polysyllabiques simplifiés ont été utilisées pour générer des fréquences de caractères à la fois simplifiées et traditionnelles.

Informations bibliographiques pour la source d'impression principale

| U+34CE | | 10297.260 : qīn,qìn,qǐn |
| U+34D8 | | 10278.080,10278.090 : sù |
| U+5364 | | 10093.130 : xī,lǔ 74609.020 : lǔ,xī |
| U+5EFE | | 10513.110,10514.010,10514.020 : gǒng |

Par exemple, la valeur « kHanyuPinyin » pour 卤 U+5364 est « 10093.130 : xī,lǔ 74609.020 : lǔ,xī ». Cela signifie que 卤 U+5364 se trouve dans « kHanYu » aux entrées 10093.130 et 74609.020. La première entrée a les deux lectures pīnyīn xī et lǔ (dans cet ordre), tandis que la dernière entrée a les lectures lǔ et xī (inversant l'ordre).

Ces données ont été saisies à l'origine par 井作恆 Jǐng Zuòhéng, corrigées par 聃媽歌 Dān Māgē (Magda Danish, à l'aide d'un logiciel offert par 文林 Wénlín Institute, Inc. et de tableaux préparés par 曲理查 Qū Lǐchá), puis corrigées à nouveau et préparées. pour le Consortium Unicode par 曲理查 Qū Lǐchá (2008-01-14).

Ainsi, « 1187.060 » indique le sixième caractère de la page 1187. Un caractère qui ne figure pas dans ce dictionnaire mais auquel une position entre le 6e et le 7e caractère de la page 1187 est attribuée à des fins de tri aurait le code « 1187.061 »

Ce champ représente la position officielle du caractère dans le dictionnaire Dae Jaweon tel qu'il est utilisé par l'IRG dans l'algorithme de tri à quatre dictionnaires.

Ainsi, « 32264.080 » indique le huitième caractère de la page 2264 du volume 3. Un caractère qui ne figure pas dans ce dictionnaire mais auquel une position entre le 8e et le 9e caractère de cette page est attribuée à des fins de tri aurait le code « 32264.081 »

Ce champ représente la position officielle du caractère dans le dictionnaire Hanyu Da Zidian tel qu'il est utilisé par l'IRG dans l'algorithme de tri à quatre dictionnaires.

Ainsi, « 1187.060 » indique le sixième caractère à la page 1187. Un caractère qui ne figure pas dans ce dictionnaire mais auquel une position entre le 6e et le 7e caractère à la page 1187 est attribuée à des fins de tri aurait le code « 1187.061 ».

K0 KS X 1001:2004 (anciennement KS C 5601-1987)
K1 KS X 1002:2001 (anciennement KS C 5657-1991)
K2 KS X 1027-1:2011 (anciennement PKS C 5700-1 1994)
K3 KS X 1027-2:2011 (anciennement PKS C 5700-2 1994)
K4 KS X 1027-3:2011 (anciennement PKS 5700-3:1998)
K5 KS X 1027-4:2011 (formerly Korean IRG Hanja Character Set 5th Edition: 2001)
KC Korean History On-Line (한국 역사 정보 통합 시스템)

T1 TCA-CNS 11643-1992 1st plane
T2 TCA-CNS 11643-1992 2nd plane
T3 TCA-CNS 11643-1992 3rd plane with some additional characters
T4 TCA-CNS 11643-1992 4th plane
T5 TCA-CNS 11643-1992 5th plane
T6 TCA-CNS 11643-1992 6th plane
T7 TCA-CNS 11643-1992 7th plane
TB TCA-CNS Ministry of Education, Hakka dialect, May 2007
TC TCA-CNS 11643-1992 12th plane
TD TCA-CNS 11643-1992 13th plane
TE TCA-CNS 11643-1992 14th plane
TF TCA-CNS 11643-1992 15th plane

Published by Japan's Ministry of Justice (法務省) in 2010 and amended in 2015 and 2017 with one additional ideograph during each year, Jinmei-yō Kanji (人名用漢字) includes 863 ideographs for use in personal names in Japan.

Published by Japan's Agency for Cultural Affairs (文化庁) in 2010, Jōyō Kanji (常用漢字) includes 2,136 ideographs for common use in Japan.

Thus, “1187.060” indicates the sixth character on page 1187. A character not in this dictionary but assigned a position between the 6th and 7th characters on page 1187 for sorting purposes would have the code “1187.061”.

The Supreme Court of Korea published a large list of ideographs for use in personal names, and this property corresponds to an 1,800-ideograph subset that is separate from those intended only for use in personal names and covered by the kKoreanName property.

The Supreme Court of Korea published this list of ideographs, and this property excludes 1,800 ideographs that represent a subset that the kKoreanEducationHanja property covers.

1) C or V. “C” indicates that the Unicode code point maps directly to the Adobe-Japan1-6 CID that appears after it, and “V” indicates that it is considered a variant form, and thus not directly encoded.

This field is also used for additional radical-stroke indices where either a character may be reasonably classified under more than one radical, or alternate stroke count algorithms may provide different stroke counts.

The 25334 character references are given in the form “ABC.XY”, in which: “ABC” is the zero-padded page number [004..546] “XY” is the zero-padded number of the character on the page [01..73]. For example, 364.38 indicates the 38th character on Page 364 (i.e. 澍). Where a given Unicode Scalar Value (USV) has more than one reference, these are space-delimited.

-- Release information (20080814) --

This release corrects several mappings. This data set now contains a total of 25334 references, for 19583 different hanzi.

-- Release information (20031005) --

This release corrects several mappings.

-- Release information (20020310) --

This data set contains a total of 25334 references, for 19572 different hanzi (up from 25330 and 19511 in the previous release).

This release of the kSBGY data fixes a number of mappings, based on extensive work done since the initial release (compare the initial release counts given below). See the end of this header for additional information.

-- Initial release information (20020310) --

The original data was input under the direction of Prof. LUO Fengzhu at Taiwan Taoyuanxian Yuan Zhi University (see below) using an early version of the Big5- based CDP encoding scheme developed at Academia Sinica. During 2000-2002 this raw data was processed and revised by Richard Cook as follows: the data was converted to Unicode encoding using his revised kHanYu mapping tables (first provided to the Unicode Consortium for the the Unihan database release 3.1.1d1) and also using several other mapping tables developed specifically for this project the kSBGY indices were generated based on hand-counts of all page totals numerous indexing errors were corrected and the data underwent final proofing.

The SBGY text, which dates to the beginning of the Song Dynasty (c. 1008, edited by 陳彭年 CHEN Pengnian et al.) is an enlargement of an earlier text known as 《切韻》 Qie Yun (dated to c. 601, edited by 陸法言 LU Fayan). With 25,330 head entries, this large early lexicon is important in part for the information which it provides for historical Chinese phonology. The GY dictionary employs a Chinese transcription method (known as 反切) to give pronunciations for each of its head entries. In addition, each syllable is also given a brief gloss.

It must be emphasized that the mapping of a particular SBGY glyph to a single USV may in some cases be merely an approximation or may have required the choice of a “best possible glyph” (out of those available in the Unicode repertoire). This indexing data in conjunction with the print sources will be useful for evaluating the degree of distinctive variation in the character forms appearing in this text, and future proofing of this data may reveal additional Chinese glyphs for IRG encoding.

-- Bibliographic information on the print sources --

《宋本廣韻》 <<Song Ben Guang Yun>> [‘Song Dynasty edition of the Guang Yun Rhyming Dictionary’], edited by 陳彭年 CHEN Pengnian et al. (c. 1008).

Two modern editions of this work were consulted in building the kSBGY indices:

《新校正切宋本廣韻》。台灣黎明文化事業公司 出版,林尹校訂1976 年出版。[This was the edition used by Prof. LUO (台灣桃園縣元智大學中語系羅鳳珠), and in the subsequent revision, conversion, indexing and proofing.]

《新校互註‧宋本廣韻》。香港中文大學,余迺永 1993, 2000 年出版。ISBN: 962-201-413-5 7-5326-0685-6. [Textual problems were resolved on the basis of this extensively annotated modern edition of the text.]

For further information on this index data and the databases from which it is excerpted, see:

The basic syntax is a Unicode scalar value. It may optionally be followed by additional data. The additional data is separated from the Unicode scalar value by a less-than sign (<), and may be subdivided itself into substrings by commas, each of which may be divided into two pieces by a colon. The additional data consists of a series of field tags for another field in the Unihan database indicating the source of the information. If subdivided, the final piece is a string consisting of the letters T (for tòng, U+540C 同) B (for bù, U+4E0D 不), Z (for zhèng, U+6B63 正), F (for fán, U+7E41 繁), or J (for jiǎn U+7C21 簡/U+7B80 简).

T is used if the indicated source explicitly indicates the two are the same (e.g., by saying that the one character is “the same as” the other).

B is used if the source explicitly indicates that the two are used improperly one for the other.

Z is used if the source explicitly indicates that the given character is the preferred form. Thus, kHanYu indicates that U+5231 刱 and U+5275 創 are semantic variants and that U+5275 創 is the preferred form.

F is used if the source explicitly indicates that the given character is the traditional form.

J is used if the source explicitly indicates that the given character is the simplified form.

Published by the Chinese government in 2013, this list includes 8,105 ideographs in three levels containing 3,500 (index numbers 1 through 3500), 3,000 (3501 through 6500), and 1,605 (6501 through 8105) ideographs, respectively. Ideographs for more general use are in the first two levels, with those in the first level being more frequently used. The ideographs in the third level are used for personal names, place names, and for science and technology.

The preferred value is the one most commonly associated with the character in modern text using customary fonts.

Each pīnyīn reading is preceded by the character’s location(s) in the dictionary, separated from the reading by “:” (colon) multiple locations for a given reading are separated by “,” (comma) multiple “location: reading” values are separated by “ ” (space). Each location reference is of the form /[0-9]<4>.[0-9]<3>*?/ . The number preceding the period is the page number, zero-padded to four digits. The first two digits of the number following the period are the entry’s position on the page, zero-padded. The third digit is 0 for a main entry and greater than 0 for a parenthesized variant of the main entry. A trailing “*” (asterisk) on the location indicates an encoded variant substituted for an unencoded character (see below).

《现代汉语词典》 [Xiàndài Hànyǔ Cídiǎn = XHC ‘Modern Chinese Dictionary’]. 中国社会科学院语言研究所词典编辑室编 [Chinese Academy of Social Sciences, Linguisitics Research Institute, Dictionary Editorial Office, eds.]. 北京: 商务印书馆, 1983 [1978 年 12 月第 1 版 1983 年 1 月第 2 版 1984 年 1 月北京第 49 次印刷印张 54 统一书号: 17017.91].

Note that there are subsequent editions of this important PRC dictionary, reflecting later developments and refinements in language and orthographic standardization, and other editions should not be used in future revision of this field.

The Unihan version of this data was originally prepared by Richard Cook (initial release 2007-12-12), proofing and revising a subset of data contributed by Dr. George Bell (who input it with the help of Joy Zhao Rouzer, Steve Mann, et al., as one part of their “Quick and Easy Index of Chinese Characters with Attributes” Bell 1995-2005).

Distinct Unihan hànzì: 10,992
Distinct hànzì: 11,190
Distinct pīnyīn syllable types: 1,337

As of the present writing (Unicode 5.1), the XHC source data contains 204 unencoded characters (198 of which were represented by PUA or CJK Compatibility [or in one case, by non-CJK, see below] characters), for the most part simplified variants. Each of these 198 characters in the source is replaced by one or more encoded variants (references in all 204 cases are marked with a trailing “*” see above). Many of these unencoded forms are already in the pipeline for future encoding, and future revisions of this data will eliminate trailing asterisks from mappings.

The print source and data also include a lexical entry

〇 U+3007 : “0719.100: líng” (IDEOGRAPHIC NUMBER ZERO)

4.2 Listing by Date of Addition to the Unicode Standard

The table below lists the fields of the Unihan database by the release where they were first added. Also included are fields which were dropped in a particular release. These are indicated by italics.

Unicode Version Fields Added or Dropped
11.0.0 kJinmeiyoKanji, kJoyoKanji, kKoreanEducationHanja, kKoreanName, kTGH
8.0.0 kJa
5.2 kHanyuPinyin, kIRG_MSource
5.1 kXHC1983
5.0 kCheungBauer, kCheungBauerIndex, kFourCornerCode, kHangul
4.1 kAlternateKangXi (dropped), kAlternateMorohashi (dropped), kFennIndex, kIICore, kRSAdobe_Japan1_6
4.0.1 kGSR, kHanyuPinlu, kIRG_USource
3.2 kAccountingNumeric, kAlternateHanYu (dropped), kCihaiT, kCompatibilityVariant, kFrequency, kGradeLevel, kOtherNumeric, kPrimaryNumeric, kSBGY
3.1.1 kCangjie, kCowles, kFenn, kHKGlyph, kHKSCS, kIRG_KPSource, kJIS0213, kKPS0, kKPS1, kKarlgren, kLau, kVietnamese
3.1 kAlternateJEF (dropped), kIRG_HSource, kMeyerWempe, kPhonetic, kRSMerged (dropped), kTotalStrokes
3 kAlternateJEF, kIRGDaeJaweon, kIRGDaiKanwaZiten, kIRGHanyuDaZidian, kIRGKangXi, kIRG_GSource, kIRG_JSource, kIRG_KSource, kIRG_TSource, kIRG_VSource, kRSMerged, kSemanticVariant (reintroduced), kSpecializedSemanticVariant (reintroduced)
2.1 kSemanticVariant (dropped), kSpecializedSemanticVariant (dropped)
2.0 kAlternateHanYu, kAlternateKangXi, kAlternateMorohashi, kCNS1992, kCantonese, kDaeJaweon, kDefinition, kHanYu, kJapaneseKun, kJapaneseOn, kKangXi, kKorean, kMainlandTelegraph, kMandarin, kMatthews, kMorohashi, kNelson, kRSJapanese, kRSKanWa, kRSKangXi, kRSKorean, kRSUnicode, kSemanticVariant , kSimplifiedVariant, kSpecializedSemanticVariant, kTaiwanTelegraph, kTang, kTraditionalVariant, kZVariant

The remaining fields were added prior to Unicode 2.0.

4.3 Listing by Location within Unihan.zip

The table below lists the fields of the Unihan database. They are organized into groups according to the file within Unihan.zip where their values are found. Each field name also links to its description.

Fichier Fields within file
Unihan_DictionaryIndices.txt kCheungBauerIndex, kCowles, kDaeJaweon, kFennIndex, kGSR, kHanYu, kIRGDaeJaweon, kIRGDaiKanwaZiten, kIRGHanyuDaZidian, kIRGKangXi, kKangXi, kKarlgren, kLau, kMatthews, kMeyerWempe, kMorohashi, kNelson, kSBGY
Unihan_DictionaryLikeData.txt kCangjie, kCheungBauer, kCihaiT, kFenn, kFourCornerCode, kFrequency, kGradeLevel, kHDZRadBreak, kHKGlyph, kPhonetic, kTotalStrokes
Unihan_IRGSources.txt kCompatibilityVariant, kIICore, kIRG_GSource, kIRG_HSource, kIRG_JSource, kIRG_KPSource, kIRG_KSource, kIRG_TSource, kIRG_USource, kIRG_VSource, kIRG_MSource, kRSUnicode
Unihan_NumericValues.txt kAccountingNumeric, kOtherNumeric, kPrimaryNumeric
Unihan_OtherMappings.txt kBigFive, kCCCII, kCNS1986, kCNS1992, kEACC, kGB0, kGB1, kGB3, kGB5, kGB7, kGB8, kHKSCS, kIBMJapan, kJa, kJinmeiyoKanji, kJis0, kJis1, kJIS0213, kJoyoKanji, kKoreanEducationHanja, kKoreanName, kKPS0, kKPS1, kKSC0, kKSC1, kMainlandTelegraph, kPseudoGB1, kTaiwanTelegraph, kTGH, kXerox
Unihan_RadicalStrokeCounts.txt kRSAdobe_Japan1_6, kRSJapanese, kRSKangXi, kRSKanWa, kRSKorean
Unihan_Readings.txt kCantonese, kDefinition, kHangul, kHanyuPinlu, kHanyuPinyin, kJapaneseKun, kJapaneseOn, kKorean, kMandarin, kTang, kVietnamese, kXHC1983
Unihan_Variants.txt kSemanticVariant, kSimplifiedVariant, kSpecializedSemanticVariant, kTraditionalVariant, kZVariant

4.4 Listing of Characters Covered by the Unihan Database

The following table lists the characters covered by the Unihan database, together with the version in which they were added to the Unicode Standard.

Code Points Block Name Unicode Version
U+3400…U+4DB5 CJK Unified Ideographs Extension A 3.0
U+4E00…U+9FA5 CJK Unified Ideographs 1.1
U+9FA6…U+9FBB CJK Unified Ideographs 4.1
U+9FBC…U+9FC3 CJK Unified Ideographs 5.1
U+9FC4…U+9FCB CJK Unified Ideographs 5.2
U+9FCC CJK Unified Ideographs 6.1
U+9FCD…U+9FD5 CJK Unified Ideographs 8.0
U+9FD6…U+9FEA CJK Unified Ideographs 10.0
U+9FEB…U+9FEF CJK Unified Ideographs 11.0
U+F900…U+FA2D CJK Compatibility Ideographs
N.B., 12 code points in this range (U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, and U+FA29) lack a canonical Decomposition_Mapping value in UnicodeData.txt and so are not true CJK Compatibility Ideographs. These twelve characters should be treated as proper CJK Unified Ideographs.
1.1
U+FA2E…U+FA2F CJK Compatibility Ideographs 6.1
U+FA30…U+FA6A CJK Compatibility Ideographs 3.2
U+FA6B…U+FA6D CJK Compatibility Ideographs 5.2
U+FA70…U+FAD9 CJK Compatibility Ideographs 4.1
U+20000…U+2A6D6 CJK Unified Ideographs Extension B 3.1
U+2A700…U+2B734 CJK Unified Ideographs Extension C 5.2
U+2B740…U+2B81D CJK Unified Ideographs Extension D 6.0
U+2B820…U+2CEAF CJK Unified Ideographs Extension E 8.0
U+2CEB0…U+2EBE0 CJK Unified Ideographs Extension F 10.0
U+2F800…U+2FA1D CJK Compatibility Supplement 3.1

Note that some CJK characters ne pas explicitly have property data in the Unihan database, such as:

Code Points Block Name Unicode Version
U+2E80…U+2E99 CJK Radicals Supplement 3.0
U+2E9B…U+2EF3 CJK Radicals Supplement 3.0
U+2F00…U+2FD5 Kangxi Radicals 3.0
U+2FF0…U+2FFB Ideographic Description Characters 3.0
U+3000…U+3037 CJK Symbols and Punctuation 1.1
U+3038…U+303A CJK Symbols and Punctuation 3.0
U+303B…U+303D CJK Symbols and Punctuation 3.2
U+303E CJK Symbols and Punctuation 3.0
U+303F CJK Symbols and Punctuation 1.1
U+3105…U+312C Bopomofo 1.1
U+312D Bopomofo 5.1
U+3190…U+319F Kanbun 1.1
U+31A0…U+31B7 Bopomofo Extended 3.0
U+31C0…U+31CF CJK Strokes 4.1
U+31D0…U+31E3 CJK Strokes 5.1
U+3220…U+3243 Enclosed CJK Letters and Months 1.1
U+3280…U+32B0 Enclosed CJK Letters and Months 1.1
U+32C0…U+32CB Enclosed CJK Letters and Months 1.1
U+3358…U+3370 CJK Compatibility 1.1
U+337B…U+337F CJK Compatibility 1.1
U+33E0…U+33FE CJK Compatibility 1.1


5 History

The Unihan database originated as a Hypercard stack using data provided by such organizations as Apple, RLG, and Xerox. Printed versions are found in The Unicode Standard, Version 1.0, volume 2. Electronic versions were available on floppy disk in the form of a file called CJKXREF.TXT.

The first general electronic release of CJKXREF.TXT (961 kB) was included with Unicode 1.1.5 in July 1995. This version of the file is in a multi-column format and includes the data used in printing The Unicode Standard, Version 1.0, volume 2 with the exception of the Fujitsu mappings, which were found to be incorrect and withdrawn.

The electronic version of the Unihan database was substantially revised for the publication of Unicode 2.0.0 in July 1996. The file was renamed UNIHAN.TXT its permanent, archival link is Unihan-1.txt (7.9 MB). The format of the file is essentially the same as the current release, although consolidated into a single file. The fields were explicitly named for the first time. The data was at the time maintained using custom, MacApp-based database software. The source code for this software used an enumerated type for the numeric field tags, and the enumerator names (each beginning with a "k" indicating their use as a constant) were used in the text file as field names.

Unihan-1.txt was at some point accidentally truncated on line 330,553 (partway through the data for U+8BC1). No corrected version of the file was made available. Instead, it was superseded by the Unihan-2.txt (10 MB) file released with Unicode 2.1.2 in May 1998.

The difficulty of downloading a file 19 MB in size with the technology of the time led to the Unihan database being made available as both a single text file and compressed archives of that text file as of Unicode 3.1.0 in March 2001. The format of the Unihan database remained essentially unchanged until Unicode 5.1.0 (April 2008), when the text file was no longer included and the database became available only as a zipped archive.

Finally, the archive was changed from containing one text file to containing multiple text files as of Unicode 5.2.0 (October 2009).


Built-in encoding schemes

.NET provides various encoding schemes "out of the box". What follows below is a description (as far as I can find) of the various different encoding schemes, and how they can be retrieved.

ASCII

ASCII is one of the most commonly known and frequently misunderstood character encodings. Contrary to popular belief, it is only 7 bit - there are no ASCII characters above 127. If anyone says that they wish to encode (for example) "ASCII 154" they may well not know exactly which encoding they actually mean. If pressed, they're likely to say it's "extended ASCII". There is no encoding scheme called "extended ASCII". There are many 8-bit encodings which are supersets of ASCII, and usually it is one of these which is meant - commonly whatever Windows Code Page is the default for their computer. Every ASCII character has the same value in the ASCII encoded as in the Unicode coded character set - in other words, ASCII X is the same character as Unicode X for all characters within ASCII. The .NET ASCIIEncoding class (an instance of which can be easily retrieved using the Encoding.ASCII property) is slightly odd, in my view, as it appears to encode by merely stripping away all bits above the bottom 7. This means that, for instance, Unicode character 0xb5 ("micro sign") after encoding and decoding would become Unicode 0x35 ("digit five"), rather than some character showing that it was the result of encoding a character not contained within ASCII.

UTF-8 is a good general-purpose way of representing Unicode characters. Each character is encoded as a sequence of 1-4 bytes. (All the characters < 65536 are encoded in 1-3 bytes I haven't checked whether .NET encodes surrogates as two sequences of 1-3 bytes, or as one sequence of 4 bytes). It can represent all characters, it is "ASCII-compatible" in that any sequence of characters in the ASCII set is encoded in UTF-8 to exactly the same sequence of bytes as it would be in ASCII. In addition, the first byte is sufficient to say how many additional bytes (if any) are required for the whole character to be decoded. UTF-8 itself needs no byte-ordering mark (BOM) although it could be used as a way of giving evidence that the file is indeed in UTF-8 format. The UTF-8 encoded BOM is always 0xef 0xbb 0xbf. Obtaining a UTF-8 encoding in .NET is simple - use the Encoding.UTF8 property. In fact, a lot of the time you don't even need to do that - many classes (such as StreamWriter ) used UTF-8 by default when no encoding is specified. (Don't be misled by Encoding.Default - that's something else entirely!) I suggest always specifying the encoding however, just for the sake of readability.

UTF-16 and UCS-2

UTF-16 is effectively how characters are maintained internally in .NET. Each character is encoded as a sequence of 2 bytes, other than surrogates which take 4 bytes. The opportunity of using surrogates is the only difference between UTF-16 and UCS-2 (also known as just "Unicode"), the latter of which can only represent characters 0-0xffff. UTF-16 can be big-endian, little-endian, or machine-dependent with optional BOM (0xff 0xfe for little-endianness, and 0xfe 0xff for big-endianness). In .NET itself, I believe the surrogate issues are effectively forgotten, and each value in the surrogate pair is treated as an individual character, making UCS-2 and UTF-16 "the same" in a fuzzy sort of way. (The exact differences between UCS-2 and UTF-16 rely on deeper understanding of surrogates than I have, I'm afraid - if you need to know details of the differences, chances are you'll know more than I do anyway.) A big-endian encoding may be retrieved using Encoding.BigEndianUnicode, and a little-endian encoding may be retrieved using Encoding.Unicode. Both are instances of System.Text.UnicodeEncoding, which can also be constructed directly with appropriate parameters for whether or not to emit the BOM and which endianness to use when encoding. I believe (although I haven't tested) that when decoding binary content, a BOM in the content overrides the endianness of the encoder, so the programmer doesn't need to do any extra work to decode appropriately if they either know the endianness or the content contains a BOM.

UTF-7 is rarely used, in my experience, but encodes Unicode (possibly only the first 65535 characters) entirely into ASCII characters (not bytes!). This can be useful for mail where the mail gateway may only support ASCII characters, or some subset of ASCII (in, for example, the EBCDIC encoding). This description sounds fairly woolly for a reason: I haven't looked into it in any detail, and don't intend to. If you need to use it, you'll probably understand it reasonably well anyway, and if you don't absolutely have to use it, I'd suggest steering clear. An encoding instance in .NET can be retrieved using Encoding.UTF7

Windows/ANSI Code Pages

Windows Code Pages are usually either single or double byte character sets, encoding up to 256 or 65536 characters respectively. Each is numbered, an encoding for a known code page number can be retrieved using Encoding.GetEncoding(int) . Code pages are mostly useful for legacy data which is often stored in the "default code page". An encoding for the default code page can be retrieved using Encoding.Default . Again, I try to avoid using code pages where possible. More information is available in the MSDN.

ISO-8859-1 (Latin-1)

Like ASCII, every character in Latin-1 has the same code there as in Unicode. I haven't been able to ascertain for certain whether or not Latin-1 has a "hole" of undefined characters from 128 to 159, or whether it contains the same control characters there that Unicode does. (I had begun to lean towards the "hole" idea, but Wikipedia disagrees, so I'm still sitting on the fence). Latin-1 is also code page 28591, so obtaining an encoding for it is simple: Encoding.GetEncoding (28591) .


1 réponse 1

It's not clear why you would need to p/invoke the native MessageBoxU function, given you're not using it anywhere, correctly preferring the language's own MsgBox wrapper.

Remove all the dead/commented-out code if you're not using it - otherwise is obscures the intent of the code.

As far as I know, Universal_Converter_v1.0 is only a valid VBA identifier if you surround it with [SquareBrackets] , because the dot is a special character that cannot legally be part of an identifier. Version numbers don't belong in names either, and Upper_Snake_Case looks very strange when everything in the language's standard libraries is in PascalCase .

What happens when you make a minor change to that procedure, you increment the minor version digit and update all call sites accordingly? That's . madness!

A good reason to refactor/rename would be to make the procedure's name start with a verb: UniversalConverter looks more like a name for a class than one for a procedure keep nouns for types, and use verbs for procedures.

Why would one be a constant and the other a variable? Avoid numeric suffixes in identifiers, they quickly make a maintenance nightmare.

Where's Option Explicit ? Looks like you're using variables that aren't declared anywhere - that's another maintenance nightmare waiting to happen.

You're not consistently using Hungarian notation, some of the prefixes you use seem completely arbitrary and meaningless. I like lenXxx for a variable that's holding the length of a string because it tells the reader what the variable is used for, but strXxx and oRange (boy that one is funny! Say it 3 times out loud if you're not sure why!) have prefixes that stand for a type, and that's wrong.

The code could use some vertical whitespace between procedures and functions, it would feel less monolithic.

Functions Mid , Str , Chr , ChrW , Left and Right return a Variant , which incurs an implicit type conversion. Use the "stringly-typed" Mid$ , Str$ , Chr$ , ChrW$ , Left$ and Right$ versions instead, which return an actual String . It's not clear why you're only quelquefois using them.

VBA has too many loop constructs Do While. Loop is there only to please the fans of Do. Loop - a more succinct construct would be While. Wend .


How to Convert Text to Unicode Code Points

The process for working with character encodings in Python, or converting text to Unicode code points at any point in time, can be incredibly confusing, complex, and convoluted – especially if you aren’t particularly familiar with the Unicode language to begin with.

Thankfully though, there are a lot of tools (and a lot of tutorials) out there that can dramatically streamline and simplify things for you moving forward.

You’ll find the inside information below incredibly useful at helping you tackle Unicode code points but there are a host of “automatic converters” that you might want to take advantage of online as well (almost all of the best ones being open-source and free of charge, too). If you’re working with a web host like BlueHost, or using a CMS like WordPress, then this conversion process is already taken care of for you.

By the time you’re done with the details below you’ll know exactly how to:

  • Understand the overall conceptual point of character encodings and the numbering system in Unicode
  • How Unicode has built-in support for numbering systems through different INT literals
  • How to take advantage of built-in functions that are specifically designed to “play nicely” with character encodings and different numbering systems

What exactly is character encoding to begin with?

To start things off you have to understand exactly what character encoding is to begin with, which can be a bit of a tall task considering the fact that there are hundreds of character encodings that you can deal with as a programmer throughout your career.

One of the very simplest character encodings is ASCII so that’s going to be the fundamental standpoint that we work with throughout this quick example. Relatively small and including contained encoding you aren’t going to have to worry about a whole lot of headache or hassle wrapping your head around this process but will be able to use the fundamentals here in any other character encoding you do later down the line.

  • All lowercase English letters as well as all uppercase English letters
  • Most traditional punctuation and symbols you’ll find on a keyboard
  • Whitespace markers
  • And even some non-printable characters

All of these inputs can be translated from traditional characters that we are able to see and read in our own native language (if you’re working in English, anyways) to integers and inevitably into computer bits – each and every one of that can be encoded to a very unique and specific sequence of bits that do something very specific in the world of Unicode.

If every single character has its own specific code point (sometimes referred to as an integer) that means that different characters are segmented into different code point ranges inside of the actual ASCII “language”.

In ASCII a code point range breakdown is as follows:

  • 0 through 31 code points – These are your control or nonprintable characters
  • 32 through 64 code points – These are your symbols, your numbers, and punctuation marks as well as whitespace
  • 65 through 90 code points – These would be all of your uppercase English alphabet letters
  • 91 through 96 code points – Graphemes that can include brackets and backslashes
  • 97 through 122 code points – These are your lowercase English alphabet letters
  • 123 through 126 code points – Ancillary graphemes
  • Code point 127 – This is your Control point or the Delete key

All 128 of those individual characters encompass the entirety of the character set that is “understood” by the ASCII language. If a character is input into ASCII that isn’t included in the list we highlighted above isn’t going to be expressed and it isn’t going to be understood based on this encoding scheme.

How Bits Work

As we highlighted above, individual characters are going to be converted into individual code points that are later expressed as integers and bits – the essential building block of all language and information that computers understand.

A bit is the expression of binary language, a signal that your computer understands because it only has one of two binary states. A bit is either a zero or a one, a “yes” or a “no”, a “true” or a “false”, and it’s either going to be “on” or it’s going to be “off”.

Because all the data that computers have to work with needs to be condensed down to its bare-bones and its most essential elements (bits) each and every one of those individual characters that may be input into the Unicode language has to be distilled down into decimal form.

As more decibels are added the binary form is expanded on, always looking for ways to express the information and data being conveyed in binary form so that the computer can understand exactly what’s happening.

The problem with ASCII and the rise of Unicode

The reason that Unicode exists has a lot to do with the fact that ASCII as a computer language simply doesn’t have a large enough set of characters to accommodate every other language in the world, unique dialects, and computers that are capable of working with and reading different symbols and glyphs.

Truth be told, the biggest knock against ASCII has always been that it doesn’t even have a large enough character set to accommodate the entirety of the English language, even.

This is where Unicode swings in to the scene.

Essentially acting as the same fundamental building block language that your computer can understand, Unicode is made up of a much larger (MUCH larger) set of individual code points.

There are technically a variety of different encoding schemes that can be taken advantage of when it comes to Unicode as well, each of them with their own distinct code points, but the overwhelming majority of folks using Unicode are going to leverage UTF-8 (something that’s become a bit of a universal standard).

Unicode significantly expands on the traditional ASCII table. Instead of being capable of handling 128 characters, though, Unicode can handle 1,114,112 different characters – representing a significant upgrade that allows for far more complexity and precision in a programming language.

At the same time, some argue that Unicode isn’t exactly and encoding specifically but instead is something more of an implementation of a variety of other character encodings. There’s a lot of nuance here that you may or may not be interested in getting into (depending on how deep you want to dive into the world of Unicode), but it’s important to know that there is a distinction between the two.

How to actually convert text into Unicode

If you are seriously interested in converting text into Unicode the odds are very (VERY) good that you aren’t going to want to handle the heavy lifting all on your own, simply because of the complexity that all those individual characters and their encoding can represent.

Instead, you’ll want to take advantage of online conversion tools that allow you to input pretty much any character imaginable directly into this tool and have it immediately transform that character set (that very specific character set) into exact Unicode – almost always in UTF-8 but sometimes in UTF-16 or UTF-32, depending on what you are interested in.

These conversion tools are ridiculously easy to use and as long as you are moving forward with conversion solutions from reputable sources you shouldn’t have anything to worry about as far as accuracy, security, or safety are concerned.

It sure beats having to try and figure out the binary code points of characters in Unicode manually!


Voir la vidéo: Qgis Placer manuellement des étiquettes