2011-12-01 12 views
5

Hay funciones de cadena multibyte en PHP para manejar cadena multibyte (por ejemplo, secuencia de comandos CJK). Por ejemplo, yo quiero contar el número de letras de una cadena de múltiples bytes utilizando len función en Python, pero devolver un resultado incorrecto (es decir, número de bytes de esta cadena)Cómo manejar cadena multibyte en Python

japanese = "桜の花びらたち" 
print japanese 
print len(japanese)#return 21 instead of 7 

¿Hay algún paquete o función como mb_strlen en PHP?

+2

por la integridad: Esto ya no es un problema en Python 3 con soporte Unicode nativo en todas las cadenas. – poke

Respuesta

9

Uso Unicode strings:

# Encoding: UTF-8 

japanese = u"桜の花びらたち" 
print japanese 
print len(japanese) 

Nota del u delante de la cadena.

Para convertir una cadena de bytes a Unicode, utilice decode: "桜の花びらたち".decode('utf-8')

2

intente convertirlo a unicode primera:

print len(japanese.decode("utf-8")) 

da 7. Usted está trabajando en la cadena codificada en UTF-8, que de hecho tiene 21 bytes.

+0

UnicodeEncodeError: el códec 'ascii' no puede codificar caracteres en la posición 0-6: ordinal no está en rango (128) :( – hungneox

+1

lo siento, su solución también funciona> _ hungneox

+0

Para eliminar el error:
UnicodeEncodeError : codec 'ascii' no puede codificar los caracteres en la posición 0-6: no ordinal en el rango (128) :(
Añadir la siguiente línea discontinua:
# codificación: UTF-8
agathodaimon

Cuestiones relacionadas