2010-03-23 16 views

Respuesta

0

Lo admite en el sentido de que puede usar Unicode en cadenas Lua. Depende específicamente de lo que planeas hacer, pero la mayoría de las limitaciones pueden solucionarse fácilmente extendiendo Lua con tus propias funciones.

6

Si desea una respuesta breve, es "sí y no" como se coloca en el sitio vinculado.

Lua admite Unicode en la forma en que se admite la especificación, almacenamiento y consulta de valores de bytes arbitrarios en cadenas, por lo que puede almacenar cualquier tipo de cadena codificada con codificación Unicode en una cadena Lua.

Lo que no admite iteración por carácter Unicode, no hay función estándar para longitud de cadena en caracteres Unicode, etc. Por lo tanto, el tipo de nivel superior de soporte Unicode (como el disponible en Python con longitud, inferior -> superior conversión de caso, codificación en codificación arbitraria, etc.) no está disponible.

+5

Nota: hay enlaces en la parte inferior de http://lua-users.org/wiki/LuaUnicode para obtener soporte de Unicode de nivel superior. – grom

9

Lua no tiene ningún soporte para unicode (que no sea aceptar cualquier valor de byte en cadenas). La biblioteca slnunicode tiene muchas funciones de cadena Unicode, sin embargo. Por ejemplo unicode.utf8.len.

(nota: esta respuesta es robado por completo del comentario de Grom en otra pregunta - Sólo creo que merece su propia respuesta)

16

que sin duda puede tienda cadenas Unicode en LUA, como UTF-8. Puede usarlos como lo haría con cualquier cadena.

Sin embargo, Lua no proporciona ningún soporte predeterminado para las operaciones "Unicode aware" de nivel superior en tales cadenas —, por ejemplo, contando la longitud de cadena en caracteres, convirtiendo minúsculas en mayúsculas, etc. Si esta falta es significativa porque realmente depende de lo que piense hacer con estas cadenas.

enfoques posibles, dependiendo de su uso:

  1. Si lo que desea es cadenas de entrada/salida/de la tienda, y en general se utilicen como "unidades enteras" (para la mesa de indexación, etc.), no se puede necesita algún manejo especial en absoluto. En este caso, simplemente trata estas cadenas como blobs binarios.

  2. Debido al ingenioso diseño de utf8, algunos tipos de manipulación de cadenas se pueden realizar en cadenas que contengan utf8 y producirán el resultado correcto sin tener ningún cuidado especial.

    Por ejemplo, puede agregar cadenas, separarlas antes/después de los caracteres ascii, etc. Como ejemplo, si tiene una cadena "開発.txt" y busca "." en esa cadena usando string.find (string_var, "."), y luego divídalo usando la función normal string.sub en "開発" y ".txt", esas cadenas de resultados serán cadenas utf8 correctas aunque no esté utilizando ningún tipo de algoritmo "unicode-aware".

    Del mismo modo, puede hacer conversiones de casos solo en los caracteres ASCII en cadenas (aquellos con el bit alto cero), y tratar el resto de las cadenas como binarias sin atornillarlas.

  3. Algunas operaciones con reconocimiento de utf8 son tan simples que es fácil simplemente escribir las propias funciones para hacerlas.

    Por ejemplo, para calcular la longitud en caracteres unicode de una cadena, solo cuente el número de caracteres con el bit alto cero (caracteres ASCII) y la cantidad de caracteres con los dos bits superiores 11 ("bytes principales" "para caracteres que no sean ASCII); la longitud es la suma de esos dos.

  4. Para operaciones más complejas — por ejemplo, el caso de conversión de caracteres no ASCII, etc. — es probable que tenga que utilizar una biblioteca Unicode Lua, tales como los de la (mencionado anteriormente) Lua-users Unicode page

3

Lua 5.3 se lanzó ahora. Viene con a basic UTF-8 library.

Usted puede usar la biblioteca utf8 hacer cosas de codificación UTF-8, como conseguir la longitud de una cadena UTF-8 (no el número de bytes que string.len), igualando cada personaje (no bytes), etc.

No proporciona soporte nativo que no sea la codificación, como ¿este carácter es chino?

Cuestiones relacionadas