2010-09-18 17 views
35

Soy nuevo en el aprendizaje de Unicode, y no estoy seguro de cuánto debo aprender en base a mi fondo ASCII, pero estoy leyendo the C# spec on rules for identifiers para determinar qué caracteres están permitidos dentro de Azure Table (que se basa directamente en la especificación C#).¿Dónde puedo obtener una lista de caracteres Unicode por clase?

¿Dónde puedo encontrar una lista de caracteres Unicode que caen en estas categorías:

  • letter-character: Una de caracteres Unicode de clases Lu, LL, Lt, Lm, Lo, o Nl
  • combining-character: Un de caracteres Unicode de clases Mn o Mc
  • decimal-digit-character: Una de caracteres Unicode de la clase Nd
  • connecting-character: Una de caracteres Unicode de la clase Pc
  • formatting-character: Una de caracteres Unicode de la clase Cf
+1

@Hans Passant, esa expresión regular es solo para un nombre de tabla, no para un identificador que se usa en nombres de propiedad como PartitionKey y RowKey – LamonteCristo

+6

@Hans: Comentario muy incorrecto. A-Za-Z cubre 52 caracteres Unicode de miles de letras permitidas. – Timwi

+0

@Timwi - oh, yo no sabía eso. Cité de los documentos, por supuesto. –

Respuesta

33

Puede recuperar esta información de forma automatizada a partir del archivo de datos oficial de Unicode, UnicodeData.txt, que se publica aquí:

Este es un archivo con los valores separada por comas en cada línea. La tercera columna te dice la clase de personaje de cada personaje.

El beneficio de esto es que puedes obtener el nombre del personaje para cada personaje, para que tengas una mejor idea de qué es eso que solo mirando al personaje en sí (por ejemplo, ¿sabes lo que es? Así es, es Ban. En georgiano. :-))

+0

¡Agradable! Incluso puedo buscar caracteres dentro de cada categoría como esta "; Cf;" – LamonteCristo

+1

... Nunca en mi vida pensé que Unicode fuera tan complejo. Parece que tengo mucho que aprender a hacer. – LamonteCristo

+0

esto es extraño. Dice en el archivo de texto que el signo "#" es una categoría "Sc", MSDN dice [lo mismo] (https://msdn.microsoft.com/en-us/library/system.globalization.unicodecategory (v = vs .110) .aspx), pero de hecho es una "OtraPunción", es decir, "Ps". ¿Error en .net 4.5.1? – Marcus

34

FileFormat.info tiene una lista de caracteres Unicode por categoría:

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

+4

+1 - Esta opción se ve mejor para la navegación casual – LamonteCristo

+5

Ese sitio no analiza correctamente UnicodeData.txt. No reconoce rangos y no comprende Cn. Entonces, las categorías Co, Cs, Lo y Cn tienen recuentos incorrectos. Aparte de eso, es un sitio genial. –

12

Puede, por supuesto, utilizar 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); 
} 

Puede encontrar una lista de categorías Unicode y sus nombres cortos en MSDN, por ejemplo, "Ll" es la abreviatura de UnicodeCategory.LowercaseLetter.

+0

¿Cómo sabes codificar esas constantes? ¿De dónde vienen? – LamonteCristo

+2

@ MakerOfThings7: De la documentación de [Char.ConvertFromUtf32] (http://msdn.microsoft.com/en-us/library/system.char.convertfromutf32.aspx). Lanza una excepción si su argumento "no es un punto de código Unicode válido de 21 bits que va desde U + 0 a U + 10FFFF, excluyendo el rango de par suplente de U + D800 a U + DFFF". – dtb

+0

Linq es divertido. +1 porque voy a aprender algo de esto. Además, creo que no todos los caracteres se mostrarán en "Console.write". Quizás es mejor para mí dar salida a estos códigos en una página HTML para que IE los renderice. – LamonteCristo

2

En el ANTLR lexer puede encontrar juegos de caracteres Unicode (LU, LL, LT, LM y LO) en un formato de rango conveniente.

Cuestiones relacionadas