No hay un enfoque directo correcto con cualquier tipo de "cadena Unicode".
Incluso la cadena de caracteres "Unicode" UTF-16 de Python tiene caracteres de longitud variable, por lo que no puede cortar con la función ustring [: 5]. Debido a que algunos puntos de código Unicode pueden usar más de un "carácter", es decir, pares de sustitución.
Así que si usted quiere cortar 5 puntos de código (tenga en cuenta estos no son caracteres) por lo que puede analizar el texto, véase http://en.wikipedia.org/wiki/UTF-8 y http://en.wikipedia.org/wiki/UTF-16 definiciones. Entonces necesitas usar algunas máscaras de bits para descubrir los límites.
También todavía no obtienes caracteres. Porque, por ejemplo. Palabra "שָלוֹם" - paz en hebreo "Shalom" consta de 4 caracteres y 6 puntos de código letra "shin", vocal "a" letra "lamed", letra "vav" y vocal "o" y letra final "mem".
Así carácter no es código punto.
Lo mismo para la mayoría de los idiomas occidentales donde una letra con signos diacríticos se puede representar como dos puntos de código. Busque, por ejemplo, "normalización Unicode".
Así que ... Si realmente necesita 5 primeros caracteres, debe usar herramientas como la biblioteca de ICU. Por ejemplo, hay una biblioteca de ICU para Python que proporciona caracteres de límite de iterador.
¿Estás seguro de que tienes una cadena Unicode real y no (por ejemplo) una cadena de bytes con datos UTF-8? Si es así, ¿cómo defines 'personaje'? (cadenas Unicode son cadenas de puntos de código (en compilaciones UCS-4) o codeunits.) –
Desde nuestro host: http://www.joelonsoftware.com/articles/Unicode.html – Will
Will, por favor no. Eso no es realmente aplicable aquí. – Joey