string - ¿Por qué se desaconseja la indexación de cadenas UTF8 en Julia?
utf-8 julia-lang (1)
La guía de introducción a Julia, Learn Julia in Y Minutes , desalienta a los usuarios a indexar cadenas UTF8:
# Some strings can be indexed like an array of characters
"This is a string"[1] # => ''T'' # Julia indexes from 1
# However, this is will not work well for UTF8 strings,
# so iterating over strings is recommended (map, for loops, etc).
¿Por qué se desaconseja iterar sobre tales cadenas? ¿Qué específicamente acerca de la estructura de este tipo de cadena alternativa hace que el error de indexación sea propenso? ¿Es este un problema específico de Julia, o se extiende a todos los idiomas con soporte de cadena UTF8?
Porque en UTF8 un personaje no siempre está codificado en un solo byte.
Tomemos por ejemplo el lenguaje alemán string böse
(evil). Los bytes de esta cadena en codificación UTF8 son:
0x62 0xC3 0xB6 0x73 0x65
b ö s e
Como puede ver, la diéresis ö
requiere 2 bytes.
Ahora, si indexas directamente esta cadena codificada en UTF8, "böse"[4]
te dará s
y no e
.
Sin embargo, puede usar la cadena como un objeto iterable en julia:
julia> for c in "böse"
println(c)
end
b
ö
s
e
Y como ha preguntado, no, los problemas de indexación directa de bytes con cadenas UTF8 no son específicos de Julia.
Recomendación para lectura adicional:
http://docs.julialang.org/en/release-0.4/manual/strings/#unicode-and-utf-8