2010-09-18 14 views
35

Je suis novice en apprentissage Unicode, et je ne sais pas exactement ce que je dois apprendre en fonction de mon arrière-plan ASCII, mais je lis the C# spec on rules for identifiers pour déterminer quels caractères sont autorisés dans Azure Table (qui est directement basé sur la spécification C#).Où puis-je obtenir une liste de caractères Unicode par classe?

Où puis-je trouver une liste de caractères Unicode qui entrent dans ces catégories:

  • letter-character: Un caractère Unicode des classes Lu, FSR, Lt, Lm, Lo, ou Nl
  • combining-character: A caractère Unicode de classes Mn ou Mc
  • decimal-digit-character: Un caractère Unicode de la classe Nd
  • connecting-character: Un caractère Unicode de la classe Cp
  • formatting-character: Un caractère Unicode de la classe Cf
+1

@Hans Passant, cette regex est juste pour un nom de table, pas pour un identifiant qui est utilisé dans les noms de propriété tels que PartitionKey et RowKey – LamonteCristo

+6

@Hans: Commentaire très faux. A-Za-Z couvre 52 caractères Unicode sur des milliers de lettres autorisées. – Timwi

+0

@Timwi - oh, je ne le savais pas. J'ai cité des docs bien sûr. –

Répondre

33

Vous pouvez récupérer ces informations de manière automatisée à partir du fichier de données Unicode officiel, UnicodeData.txt, qui est publiée ici:

Ce fichier avec des valeurs séparées des points-virgules dans chaque ligne. La troisième colonne vous indique la classe de caractères de chaque caractère. L'avantage de ceci est que vous pouvez obtenir le nom du personnage pour chaque personnage, donc vous avez une meilleure idée de ce que c'est que de simplement regarder le personnage lui-même (par exemple, vous savez ce que ბ est? il est interdit en géorgien :-))

+0

Nice! Je peux même rechercher des caractères dans chaque catégorie comme ceci "; Cf;" – LamonteCristo

+1

... Je n'ai jamais pensé que Unicode était si complexe. On dirait que j'ai beaucoup à apprendre. – LamonteCristo

+0

c'est bizarre. Il dit dans le fichier texte le signe "#" est une catégorie "Sc", MSDN dit [le même] (https://msdn.microsoft.com/en-us/library/system.globalization.unicodecategory (v = vs .110) .aspx) mais c'est en fait une "AutrePonctuation" c'est-à-dire "Ps". Bug dans .net 4.5.1? – Marcus

34

FileFormat.info a une liste de caractères Unicode par catégorie:

http://www.fileformat.info/info/unicode/category/index.htm

+4

+1 - Cette option est idéale pour la navigation occasionnelle – LamonteCristo

+5

Ce site n'analyse pas UnicodeData.txt à droite. Il ne reconnaît pas les plages et ne comprend pas Cn. Donc les catégories Co, Cs, Lo et Cn ont les mauvais comptes. A part ça, c'est un site sympa. –

12

Vous pouvez, bien sûr, utiliser LINQ:

var charInfo = Enumerable.Range(0, 0x110000) 
         .Where(x => x < 0x00d800 || x > 0x00dfff) 
         .Select(char.ConvertFromUtf32) 
         .GroupBy(s => char.GetUnicodeCategory(s, 0)) 
         .ToDictionary(g => g.Key); 

foreach (var ch in charInfo[UnicodeCategory.LowercaseLetter]) 
{ 
    Console.Write(ch); 
} 

Vous pouvez trouver une liste de catégories Unicode et leurs noms abrégés sur MSDN, par exemple, "Ll" est l'abréviation de UnicodeCategory.LowercaseLetter.

+0

Comment avez-vous su coder ces constantes? D'où viennent-ils? – LamonteCristo

+2

@ MakerOfThings7: à partir de la documentation de [Char.ConvertFromUtf32] (http://msdn.microsoft.com/en-us/library/system.char.convertfromutf32.aspx). Il émet une exception si son argument "n'est pas un point de code Unicode valide de 21 bits allant de U + 0 à U + 10FFFF, à l'exclusion de la plage de paire de substitution de U + D800 à U + DFFF". – dtb

+0

Linq est amusant. +1 puisque je vais apprendre quelque chose à partir de ça. Je pense aussi que tous les caractères ne seront pas rendus dans "Console.write". Peut-être qu'il est préférable pour moi de sortir ces codes dans une page HTML pour IE à rendre? – LamonteCristo

2

Dans le ANTLR lexer vous pouvez trouver des jeux de caractères Unicode (LU, LL, LT, LM et LO) dans un format de plage pratique.

1

est un site très utile et facile à naviguer pour naviguer dans les catégories. Il est consultable et répertorie beaucoup d'informations sur les caractères individuels Unicode.