GNU tiene una biblioteca de cadenas Unicode, llamada libunistring, pero no maneja nada tan bien como ICU.
Por ejemplo, la biblioteca GNU ni siquiera le da acceso a la intercalación, que es la base para todas las comparaciones de cadenas. Por el contrario, la UCI lo hace. Otra cosa que la UCI tiene que GNU no aparece es expresiones regulares Unicode. Para eso, es posible que desee utilizar Phil Hazel’s excellent PCRE library for C, que se puede compilar con soporte UTF-8.
Sin embargo, es posible que la biblioteca de GNU sea suficiente para lo que necesita. No me gusta mucho su API. Muy desordenado. Si le gusta la programación en C, puede probar el Go programming language, que tiene una excelente compatibilidad con Unicode. Es un lenguaje nuevo, pero pequeño, limpio y divertido de usar.
Por otro lado, los principales lenguajes interpretados - Perl, Python y Ruby - todos tienen soporte variable para Unicode que es mejor de lo que siempre obtendrás C. De ellos, el soporte Unicode de Perl es el más desarrollado y robusto.
Recuerde: no es suficiente para admitir más caracteres. Sin las reglas que los acompañan, no tienes Unicode. A lo sumo, puede tener ISO 10646: un repertorio de caracteres grandes pero sin reglas. Mi mantra es "Unicode no es solo más personajes; es más caracteres más un montón de reglas para su manejo. "
Para la longitud, vea p. ej. http://stackoverflow.com/q/5117393/440558 –
Tenga en cuenta que, por ejemplo, strlen() funciona perfectamente bien en datos codificados en utf-8, le da la longitud de la cadena uft-8. Sin embargo, no le da la cantidad de caracteres Unicode en esa cadena. – nos
algunos más enlaces de stackoverflow http://stackoverflow.com/questions/1031645/how-to-detect-utf-8-in-plain-c, http://stackoverflow.com/questions/4607413/c-library- to-convert-unicode-code-points-to-utf8/4609989 y un fragmento de código que escribí hace unas semanas https://bitbucket.org/cggaertner/libtcu/raw/5ea138154ba5/utf8z.h – Christoph