Longitud de la cuerda en Lua

String Length Lua

1. Cómo obtener la longitud de una cuerda en Lua

En términos generales, hay dos formas, una es usar '#' para calcular, la otra es usar la función de cadena string.length para calcular

|_+_|

Podemos ver que el resultado de los tres caracteres chinos aquí es de 9 bytes, principalmente debido al método de cálculo de codificación utf-8 adoptado por lua



A continuación, nos ayudaremos a comprender y procesar mejor las cadenas en lua simplemente entendiendo la codificación utf-8



Dos reglas de codificación utf-8

Las reglas de codificación UTF-8 son muy simples, como sigue:



  • Para símbolos de un solo byte, el primer bit del byte se establece en local str1='Chinese' local str2='zhongguoren' print(#str1) --9 print(string.len(str1)) --9 print(#str2) --11 print(string.len(str2)) --11. Los últimos 7 bits son el código Unicode de este símbolo. Por lo tanto, para las letras en inglés, la codificación UTF-8 y el código ASCII son iguales.
  • para 0 Signo de byte (n), antes del primer byte n > 1 Los bits se establecen en n, El primer 1 Conjunto de bits n + 1, Los dos primeros dígitos de los siguientes bytes están todos configurados 0. Los bits binarios restantes no mencionados son todos el código Unicode de este símbolo.

Una forma de expresión más intuitiva es la siguiente:

Lo que necesitamos entender aquí es el rango decimal de cada byte:



  • Byte único: 0-127
  • Byte doble: el primer byte es 192-223, el segundo byte es 127-192
  • Tres bytes: el primer byte es 224-239
  • Cuatro bytes: el primer byte es 240-247, los otros bytes son 127-192

UTF-8 usa 1 ~ 4 bytes para codificar cada carácter, y el número de bytes codificados para varios símbolos es el siguiente:

  • Un carácter US-ASCIl solo necesita codificación de 1 byte (el rango Unicode es U + 0000 ~ U + 007F).
  • Las letras latinas, griegas, cirílicas, armenias, hebreas, árabes, siríacas y otras con signos diacríticos requieren codificación de 2 bytes (Unicode varía de U + 0080 a U + 07FF).
  • Los caracteres en otros idiomas (incluido chino, japonés, coreano, sudeste asiático, Medio Oriente, etc.) incluyen los caracteres más utilizados y utilizan codificación de 3 bytes.
  • Otros caracteres del idioma que se usan raramente usan codificación de 4 bytes.

Tres, use la función string.byte () para cumplir con más requisitos de cálculo de longitud de cadena

Conozca la función string.byte () en Lua:

  • Prototipo: string.byte (s [, i [, j]])
  • Explicación: La función devuelve caracteres 10 El código digital interno (código ASCII), donde el parámetro s[i], s[i+1], ···, s[j] El valor predeterminado es 1 y el parámetro i El valor predeterminado es j. Es un valor de retorno múltiple y el índice negativo se puede utilizar para consultas inversas. Nota:Debo satisfacer yo

Si queremos grabar como 1 tanto en caracteres chinos como en inglés, ¿cómo debemos manejarlo? La idea es juzgar el número de bytes ocupados por el símbolo de acuerdo con el rango del primer byte de cada símbolo, y luego saltar el byte correspondiente cada vez para llegar al primer byte del siguiente carácter, y recorrer para obtener el número de simbolos

|_+_|