2011-05-26 15 views
11

Necesito algunas cadenas de prueba Utf32 para ejercer algún código de manipulación de cadenas multiplataforma. Me gustaría un conjunto de cadenas de prueba que utilicen las codificaciones utf32 < -> utf16 < -> utf8 para validar que los caracteres fuera de BMP se puedan transformar de utf32, a través de los substitutos utf16, a través de utf8 y viceversa. correctamente.Cadenas de prueba Unicode para pruebas unitarias

Y siempre me resulta un poco más elegante si las cadenas en cuestión no están compuestas solo de bytes aleatorios, sino que son realmente significativas en los (varios) idiomas que codifican.

Respuesta

12

Aunque esto no es exactamente lo que usted pidió, siempre he encontrado esta prueba documento útil.

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

El mismo sitio ofrece este

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt

... que son equivalentes de texto "zorro marrón rápido" de Inglés, que ejercen todos los caracteres utilizados, para una variedad de idiomas . Esta página se refiere a una lista más grande de "pangramas" que solía estar en Wikipedia, pero aparentemente fue eliminada allí.Todavía está disponible aquí:

http://clagnut.com/blog/2380/

+1

¡eso es exactamente lo que estaba buscando! –

+0

El documento de quickbrown.txt se refiere a una lista más exhumante en Wiki, pero eso se ha eliminado. Sin embargo, está [aquí] (http://clagnut.com/blog/2380/). – TinyRacoon

-1

Hmmm

Se puede encontrar una gran cantidad de datos incidentales por google (y vea la columna derecha para preguntas como éstas en SO ...)

Sin embargo, recomiendo que construir más o menos sus cadenas de prueba como matriz de bytes. En realidad, no se trata de "qué datos", solo que el Unicode se maneja correctamente.

E.g. querrá asegurarse de que las cadenas idénticas en diferentes formas normalizadas (es decir, incluso si no están en forma canónica) todavía se comparen por igual.

Querrá comprobar que la detección de longitud de cadena es robusta (y reconoce caracteres de bytes simples, dobles, triples y cuádruples). Querrá comprobar que atravesar una cadena de principio a fin respeta la misma lógica. Pruebas más específicas para el acceso aleatorio de caracteres Unicode.

Estas son todas las cosas que usted sabía, estoy seguro. Estoy deletreándolos para recordarle que necesita datos de prueba atendidos exactamente en los casos extremos, las propiedades lógicas que son intrínsecas a Unicode.

Solo entonces tendrá los datos de prueba adecuados.


Más allá de este ámbito de aplicación (manejo Unicode correcta técnica) es la localización real (intercalación, charset conversión etc.). Me refiero a la prueba de Turquía

Éstos son enlaces de ayuda:

-1

Para probar realmente todas las posibles conversiones entre formatos, que se oponen a las conversiones de caracteres (es decir, towupper(), towlower()) debe probar todos los caracteres. El siguiente bucle que nos da a todos los que:

for(wint_t c(0); c < 0x110000; ++c) 
{ 
    if(c >= 0xD800 && c <= 0xDFFF) 
    { 
     continue; 
    } 
    // here 'c' is any one Unicode character in UTF-32 
    ... 
} 

De esa manera usted puede asegurarse de que no se pierda nada (ensayo completo es decir, 100%). Esto es sólo 1.112.065 caracteres, por lo que será muy rápido con una computadora moderna.