Pequeña pregunta·Cuente el número de caracteres válidos que contienen cadenas chinas

necesidad:

  • Implemente una función de comentario, el contenido del comentario está limitado a 0-255 caracteres

En los requisitos anteriores, la función de comentario es fácil de implementar. Los caracteres ingresados ​​por el usuario se guardan en la base de datos. Los usuarios posteriores deben devolverlos al usuario en la base de datos para realizar la función anterior. Pero, ¿cómo juzgar si el actual? ¿El contenido del comentario excede el límite?

La idea más simple es usar strlen directamente para obtener la longitud de la cadena y luego determinar si la longitud excede 255. Por supuesto, esta idea no es un problema para el inglés, pero si el usuario ingresa chino, como strlen ("中文" ) (Chino en Linux) La longitud de salida de codificación predeterminada (UTF-8) es 6, obviamente habrá problemas.

Entonces, aquí se requiere un poco de conocimiento de codificación. En UTF-8, usamos 3 bytes para almacenar caracteres chinos de forma predeterminada y 1 byte para almacenar caracteres en inglés. Entonces, ¿cómo juzgamos si el byte actual es chino o inglés?

Especificamos el bit más alto del byte para distinguir chino o inglés.

  • Si el bit más alto de este byte es 0, el carácter actual es un carácter inglés.

  • Si el bit más alto de este byte es 1, el carácter actual es un carácter chino.

/**
 * @func: int get_string_len(char *str) 
 * @description: 获取 str 字符串中的有效字符长度,主要处理含中文情况
 * @param {char} *str
 * @return int 有效字符长度
 */
static int get_string_len(char *str) 
{
	int len = 0;
	for (int i = 0; i < strlen(str); ++i) {
		//判断当前位置是否为中文-按utf-8编码
		if (str[i] & 0x80) {
			i += 2;
		}
		++len;
	}
	return len;
}

En la implementación del código anterior, si el bit más alto del byte actual es 1, entonces este byte debe estar codificado en chino, por lo que es necesario saltar tres bytes.

Supongo que te gusta

Origin blog.csdn.net/m0_64560763/article/details/132489590
Recomendado
Clasificación