Primero desarrollo una biblioteca de plataforma independiente utilizando ANSI C (no C++ y ninguna biblioteca no estándar como MS CRT o glibc, ...).ANSI C UTF-8 problema
Después de algunas búsquedas, descubrí que una de las mejores formas de internacionalización en ANSI C es usar codificación UTF-8.
en UTF-8:
- strlen (s): siempre cuenta el número de bytes .
- mbstowcs (NULL, s, 0): Se puede contar el número de caracteres.
Pero tengo algunos problemas cuando quiero acceder aleatoriamente a los elementos (caracteres) de una cadena utf-8.
En la codificación ASCII:
char get_char(char* assci_str, int n)
{
// It is very FAST.
return assci_str[n];
}
En UTF-16/32 de codificación:
wchar_t get_char(wchar_t* wstr, int n)
{
// It is very FAST.
return wstr[n];
}
Y aquí mi problema en la codificación UTF-8:
// What is the return type?
// Because sizeof(utf-8 char) is 8 or 16 or 24 or 32.
/*?*/ get_char(char* utf8str, int n)
{
// I can found Nth character of string by using for.
// But it is too slow.
// What is the best way?
}
Gracias.
¿Tiene un ejemplo de un caso en el que se usa "Nth character"? –
'mbstowcs' no garantiza hacer lo que usted reclama. Depende de la configuración de tu configuración regional, mira '', y generalmente está codificado-agnóstico. Use 'iconv' o algo así si maneja codificaciones definidas. –
@R: 'replace (char * str) {for (...) {... get_char (i) ...}' –